【问题标题】:HTML upload file with Servlet使用 Servlet 上传 HTML 文件
【发布时间】:2014-03-04 03:42:29
【问题描述】:

我需要通过 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");

有人可以帮忙吗? 谢谢!

【问题讨论】:

标签: java html servlets file-upload


【解决方案1】:

您不能以常规方式引用多部分/表单数据请求的请求参数。所有参数都与上传的文件一起编码在多部分数据中。例如,请参阅 this blog post 了解如何处理此问题的扩展示例。

【讨论】:

  • 谢谢,帮了大忙。我使用了以下内容: ServletFileUpload upload = new ServletFileUpload(factory); // 要上传的最大文件大小。上传.setSizeMax(maxFileSize); // 解析请求以获取文件项。 List formItems = upload.parseRequest(request);
猜你喜欢
  • 2013-04-10
  • 2012-02-10
  • 2017-10-06
  • 2011-05-10
  • 2014-12-04
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 2010-10-31
相关资源
最近更新 更多