2014-02-06 70 views
0

我需要上傳的HTML文件,但我的形式要求必須包括其他參數和值,爲了這個,我做了如下:HTML上傳文件從Servlet

我有以下的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中執行以下問題:

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

任何人都可以幫忙嗎? 謝謝!

+0

末尾缺少'>'只是一個錯字,對嗎? –

+0

是的錯字,謝謝:) –

+0

看看[http://stackoverflow.com/questions/3337056/convenient-way-to-parse-incoming-multipart-form-data-parameters-in-a-servlet](http ://stackoverflow.com/questions/3337056/convenient-way-to-parse-incoming-multipart-form-data-parameters-in-a-servlet) –

回答

1

無法以傳統方式引用多部分/表單數據請求的請求參數。所有參數以及上傳的文件都在多部分數據中編碼。例如,請參閱this blog post瞭解如何處理這個問題的擴展示例。

+0

謝謝你,非常幫助。我使用了以下內容:ServletFileUpload upload = new ServletFileUpload(factory); //上傳的最大文件大小。 upload.setSizeMax(maxFileSize); //解析請求以獲取文件項目。 List formItems = upload.parseRequest(request); –