2010-02-04 80 views

回答

5

步驟1

閱讀adatapost的帖子。

步驟2

時退房Apache Commons FileUpload項目。

有由O'Reily一個同樣可行的解決方案,但其使用的許可證要求你購買一本書,甚至要求如此糟糕鉸接,我不會與另一個鏈接受益。

2

步驟-1

組的enctype形式標記屬性。

<form enctype="multipart/form-data" ....> 
    <input type="file" id="file1" name="file"/> 
    .... other stuff 
</form> 

步驟2

閱讀賈斯汀的帖子。

+4

拜託,你能更準確地描述一下你的第二步:「閱讀賈斯汀的帖子**第二步**」。我陷入了無限循環。謝謝。 – Hubert 2010-02-04 14:14:43

+0

+1感謝您的評論。第二步描述使用** Commons FileUpload ** API。 – adatapost 2010-02-05 01:48:40

11

要瀏覽並選擇要上傳的文件,你需要在形式<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 GuideFrequently Asked Questions以查找代碼示例並學習如何使用它以達到最佳程度(將MSIE考慮在內!)。

+0

感謝您在此處發佈有關Servlet 3.0的信息作爲參考,儘管正如您所指出的那樣,提交者很可能不會使用它。我不知道3.0規範終於填補了這個空白。 – 2010-02-06 18:36:52

+0

BufferedReader reader = request.getReader(); //...短一點 – h3xStream 2010-07-03 16:01:36

+0

要使用Servlet 3.0,我們需要支持Java EE 6.0的Web服務器......您會建議哪個? tomcat支持它嗎?或者,當我們使用Java SE 6.0時,GlassFish V3是一個更好的選擇。 – 2011-02-25 21:23:37

0

這不適用於IE7及更低版本。顯然你需要添加另一個屬性到你的窗體編碼=「multipart/form-data」

1

要處理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");