java - 使用 Servlet 上传 HTML 文件

标签 java html servlets file-upload

我需要通过 HTML 上传文件,但我的表单请求必须包含其他参数和值,为此我做了以下操作:

我有以下 html 表单:

<form action="CustomerAccountingServlet" method="post" name="payment_list_form" enctype="multipart/form-data">
<input type="hidden" name="action" value="save_payment" />
<input type="hidden" name="customer_id" value="123"/>
<input type="hidden" name="payment_id" value="444" />
<input type="file" name="invoice_file" />
<input type="submit" value="upload" />
</form

我使用以下java代码来获取文件:

public static InputStream uploadFile(HttpServletRequest request, String fileFieldName) {

        int maxFileSize = 5000 * 1024;
        int maxMemSize = 5000 * 1024;
        ServletContext context = request.getServletContext();
        String filePath = context.getInitParameter("file-upload");

        // Verify the content type
        String contentType = request.getContentType();
        if ((contentType.indexOf("multipart/form-data") >= 0)) {

            DiskFileItemFactory factory = new DiskFileItemFactory();
            // maximum size that will be stored in memory
            factory.setSizeThreshold(maxMemSize);
            // Location to save data that is larger than maxMemSize.
            factory.setRepository(new File(filePath));

            // Create a new file upload handler
            ServletFileUpload upload = new ServletFileUpload(factory);
            // maximum file size to be uploaded.
            upload.setSizeMax(maxFileSize);
            upload.setHeaderEncoding("utf-8");
            try {
                // Parse the request to get file items.
                List fileItems = upload.parseRequest(request);

                // Process the uploaded file items
                Iterator i = fileItems.iterator();
                while (i.hasNext()) {
                    FileItem fi = (FileItem) i.next();
                    if (!fi.isFormField()) {
                        if(fi.getFieldName().equals(fileFieldName)){
                            return fi.getInputStream();
                        }
                    }
                }
            } catch (Exception ex) {
                System.out.println(ex);
            }
        } else {
            System.out.println("No file was found");
        }
        return null;
    }

当我在 servlet 中执行以下操作时,我得到 null 的问题:

request.getParameter("action");
request.getParameter("customer_id");
request.getParameter("payment_id");

有人可以帮忙吗? 谢谢!

最佳答案

您无法以传统方式引用 multipart/form-data 请求的请求参数。所有参数都与上传的文件一起编码在多部分数据中。例如,参见this blog post有关如何处理此问题的扩展示例。

关于java - 使用 Servlet 上传 HTML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21615714/

相关文章:

java - 关于servlet应用程序中连接池的一些问题

gwt - 以 ROOT 身​​份部署在 Tomcat 中时,RPC/Servlet 无法正常工作

java - Spring mvc 基于区域设置的自定义日期格式

java - 如何使 Java 应用程序能够直接打开文件。例如右键单击文件或目录并能够单击 "open with mytool"

html/css : use image-set to have a portrait or landscape image as background-image for a div

javascript - 在 div 上单击显示所有带有 X id 的 div

java - 将表单数据从 PDF 传递到 iText 中的 servlet

java - 将 JavaFX 应用程序 (.Jar) 转换为 Windows 应用程序 (.exe)

java - 抽象类和多态问题

html - float 在图像上会中断溢出