如何上傳文件並獲取表單的其他參數?我想處理Java servlet中的多部分請求。多部分上傳文件servlet
回答
步驟1
閱讀adatapost的帖子。
步驟2
時退房Apache Commons FileUpload項目。
有由O'Reily一個同樣可行的解決方案,但其使用的許可證要求你購買一本書,甚至要求如此糟糕鉸接,我不會與另一個鏈接受益。
步驟-1
組的enctype形式標記屬性。
<form enctype="multipart/form-data" ....>
<input type="file" id="file1" name="file"/>
.... other stuff
</form>
步驟2
閱讀賈斯汀的帖子。
要瀏覽並選擇要上傳的文件,你需要在形式<input type="file">
場。如HTML specification中所述,您需要使用POST
方法,並且必須將表單的enctype屬性設置爲multipart/form-data
。
<form action="uploadServlet" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" />
</form>
提交這樣的形式後的形式數據是在多HttpServletRequest#getInputStream()
格式提供。 (!),出於測試目的,你可以使用下面的代碼片段讀取流:
BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream()));
for (String line; (line = reader.readLine()) != null;) {
System.out.println(line);
}
但是,您需要解析流逐字節(而不是通過炭炭)。在新的Servlet 3.0 API之前,標準Servlet API沒有提供任何內置工具來解析它們。常規表單字段也不是通常的request.getParameter()
方式,它們包含在多部分表單數據流中。
如果你不上的Servlet 3.0,但(這是唯一有點不足2歲德蒙),那麼你需要自己解析流。解析這樣的流需要精確的背景知識,瞭解多部分形式的數據請求是如何進行的specified and structured。要創建一個完美的多部分分析器,您必須編寫大量代碼。但幸運的是,這已經證明了其多年來的穩健性的Apache Commons FileUpload。仔細閱讀User Guide和Frequently Asked Questions以查找代碼示例並學習如何使用它以達到最佳程度(將MSIE考慮在內!)。
感謝您在此處發佈有關Servlet 3.0的信息作爲參考,儘管正如您所指出的那樣,提交者很可能不會使用它。我不知道3.0規範終於填補了這個空白。 – 2010-02-06 18:36:52
BufferedReader reader = request.getReader(); //...短一點 – h3xStream 2010-07-03 16:01:36
要使用Servlet 3.0,我們需要支持Java EE 6.0的Web服務器......您會建議哪個? tomcat支持它嗎?或者,當我們使用Java SE 6.0時,GlassFish V3是一個更好的選擇。 – 2011-02-25 21:23:37
這不適用於IE7及更低版本。顯然你需要添加另一個屬性到你的窗體編碼=「multipart/form-data」
要處理enctype =「multipart/form-data」我們不能使用請求。的getParameter()直接
我們處理這個問題
現在,上傳文件到服務器,可以有不同的方式。但是,我將使用由oreilly提供的MultipartRequest類。對於使用這個類,你必須有cos.jar文件。
public class UploadServlet extends HttpServlet
{
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
MultipartRequest m=new MultipartRequest(request,"d:/new");
out.print("successfully uploaded");
}
}
這將文件上傳到d:/新
現在以檢索多請求 的參數,你必須使用FilenameUtils
類和MultipartRequest
類的getOriginalFileName()
方法。
String file = FilenameUtils.getName(req.getOriginalFileName("myfile"))+"\\";
String message = req.getParameter("message");
- 1. 春季多部分文件上傳
- 2. 多部分文件上傳方法
- 3. 多部分後上傳文件
- 4. Ruby中的多部分文件上傳
- 5. Spring mvc多部分文件上傳
- 6. servlet的文件上傳
- 7. 彈出多個多部分請求文件上傳 - 多部分大小爲0
- 8. 由servlet處理的多部分圖片上傳帖子請求
- 9. 在jsp中使用多部分文件上傳文件
- 10. servlet文件上傳文件名編碼
- 11. Java Servlet將一個文件上傳到多個文件夾
- 12. AmazonS3多部分上傳
- 13. 上傳部分或多部分壓縮和上傳
- 14. 只上傳文件的一部分
- 15. Valums文件上傳 - 多文件上傳
- 16. 無法上傳文件RXSwift莫亞多部分
- 17. 的iOS夫特上傳與Alamofire(多部分)PDF文件
- 18. 來自java的多部分文件上傳發布請求
- 19. 紅寶石/黃瓜/水豚測試多部分文件上傳
- 20. PHP Curl文件上傳多部分邊界
- 21. POST請求在Spring Boot中上傳多部分文件
- 22. GoogleDrive文件多部分類型上傳在xamarin
- 23. 翻新2多部分文件上傳錯誤
- 24. 問題上傳文件從Android使用多部分
- 25. 無法使用多部分/表單數據上傳文件
- 26. 如何使用jax-rs做多部分/表單文件上傳?
- 27. 多部分POST請求不包含上傳的文件
- 28. 請求使用CSRF失敗的toolbelt多部分上傳文件
- 29. 使用OKHTTP跟蹤多部分文件上傳的進度
- 30. Restlet多部分表單文件上傳失敗,出現UnknownSizeException
拜託,你能更準確地描述一下你的第二步:「閱讀賈斯汀的帖子**第二步**」。我陷入了無限循環。謝謝。 – Hubert 2010-02-04 14:14:43
+1感謝您的評論。第二步描述使用** Commons FileUpload ** API。 – adatapost 2010-02-05 01:48:40