2013-02-27 102 views
7

我正在使用apache-commons-fileupload將文件從client轉換爲server(使用JSPServlet)。用多部分發送附加數據

JSP/HTML

<form method="POST" action="GetFile" enctype="multipart/form-data"> 
<input type="file" name="datafile"> 
<input type="text" name="text1"> 
<input type="submit" value="Next"> 
</form> 

的Servlet:的GetFile

System.out.println(request.getParameter("text1")); 

我能上傳文件到服務器上,但我不能夠得到的text1值在servlet(我得到nulltext1servlet),我需要這個textfield在提交一些附加信息的同時將其上傳到server

  • 是形式的enctype="multipart/form-data"選項不允許其他 表單數據所需提交?如果它不允許,那麼我有什麼其他選項可以將此額外textfield發送到server
  • 或者在我的代碼中還有其他問題嗎?
+0

你可以使用javascript或jquery來設置文本框中的數據 – Biswajit 2013-02-27 06:11:18

+5

@Biswajit與OP的問題無關。 – Uooo 2013-02-27 06:14:13

+0

難道是你有更多的輸入字段與'name =「text1」'?原因'request.getParameter(...)'只獲取參數的第一個值,如果具有更多具有相同'name'屬性的參數,則第一個值可能爲空,因此爲空。 – Uooo 2013-02-27 06:17:27

回答

9

是形式的enctype="multipart/form-data"選項不允許其他 表單數據所需提交?如果它不允許它,那麼我必須將其他文本字段發送到服務器的其他選項是什麼 。

不,沒有使用enctype="multipart/form-data"的問題。您可以獲取其他字段然後以這種形式存檔。

還是在我的代碼中有任何其他問題?

是的,至於現在。在使用enctype="multipart/form-data"時,不能通過使用request.getParameter(name);直接獲取參數。在使用它時,表單字段不可用作請求的參數,它們包含在流中,因此無法以正常方式獲取。您可以在the docs of using commons-fileupload的部分下找到一種方法來處理上傳的項目

+0

感謝(和+1),它的工作原理。 – Bhushan 2013-02-27 06:50:55

9

那麼參數不會丟失,只是它們是請求流的一部分。

你必須得到來自請求的所有項目和迭代,並處理它因此根據自己的項目類型

List items = upload.parseRequest(request); 

繼承人如何可以得到它

// Process the uploaded items 
Iterator iter = items.iterator(); 
while (iter.hasNext()) { 
    FileItem item = (FileItem) iter.next(); 

    if (item.isFormField()) { 

     String name = item.getFieldName();//text1 
     String value = item.getString(); 

    } else { 
     processUploadedFile(item); 
    } 
} 
+0

謝謝(和+1),它的工作原理。 – Bhushan 2013-02-27 06:51:17

0
  1. 下載JAR文件com.oreilly.servlet.MultipartRequest
  2. 在您的servlet /中導入com.oreilly.servlet.MultipartRequest。包含的Java文件中Web-Inf/classes
  3. 在你的servlet doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {方法添加

    MultipartRequest M =新MultipartRequest(請求, 「C:\ SavingDirectory」);

然後從下面的窗體調用你的變量;

String pdate = m.getParameter("plandate"); 

,並從servlet像out.println(pdate);

0

最好的做法來檢索Servlet的HTML表單字段打印出來是使用Apache公地文件上傳1.3罐子。

通過多HttpServletRequest的使用迭代器迭代,並使用一個for循環來檢查它是否isFormField(),然後

String item1=null,item2=null,item3=null; 

    if(item.isFormField()) 
    { 


     if(item.getFieldName().equals("field1")) 
     { 
      item1=item.getString(); 
     } 


     if(item.getFieldName().equals("field2")) 
     { 
      item2=item.getString(); 
     } 



     if(item.getFieldName().equals("field3")) 
     { 
      item3=item.getString(); 
     } 


    } 

和HTML文件應該是這樣的

<html> 
<body> 
<form action="servletname" method="post" enctype="multipart/form-data"> 

<input type="text" name="field1"> 
<input type="text" name="field2"> 
<input type="text" name="field3"> 
<input type="file" name="filetoupload"> 
<input type="submit" value="Upload"> 

</form> 
</body> 
</html> 
1
MultipartRequest req = new MultipartRequest(request, UPLOAD_PATH, 1024 * 1024 * 1024); 
    out.print(req.getParameter("contractNo")); 
    out.println("<BR>"); 
    Enumeration files = req.getFileNames(); 
    while (files.hasMoreElements()) { 
     String name = (String) files.nextElement(); 
     String filename = req.getFilesystemName(name); 
     String type = req.getContentType(name); 
     File uploadedFile = req.getFile("xlFile"); 
     FileInputStream fis = new FileInputStream(uploadedFile); 
     BufferedReader in = new BufferedReader(new InputStreamReader(fis)); 

     FileWriter fstream = new FileWriter(UPLOAD_PATH + name, true); 
     BufferedWriter out11 = new BufferedWriter(fstream); 

     String aLine = null; 
     while ((aLine = in.readLine()) != null) { 
      //Process each line and add output to Dest.txt file 
      out11.write(aLine); 
      out11.newLine(); 
     } 

     // do not forget to close the buffer reader 
     in.close(); 

     // close buffer writer 
     out11.close(); 
    } 

以上代碼將讀取文件以及其他表單數據一起看看req.getParameter();方法MultipartRequest req對象

相關問題