2011-09-13 80 views
2

文件後我有一個HTML頁面是這樣的:閱讀HttpServletRequest的

<FORM METHOD="POST" ACTION="http://localhost:8080/Appli/page/public/envoiPjExterne.seam" enctype="multipart/form-data"> 
    <input type="file" size="70" name="file" /><br />  
    <INPUT type="submit" value="Submit"> 
</FORM> 

和servlet的是這樣的:

protected void doPost(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException { 

DiskFileUpload upload = new DiskFileUpload(); 
upload.setSizeMax(10000000);// 10 Mo 
List items; 
try { 
     items = upload.parseRequest(request); 
     Iterator itr = items.iterator(); 
     while(itr.hasNext()) { 
      FileItem item = (FileItem) itr.next(); 
     } 
    } catch (FileUploadException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

我的目錄 「項」 始終是空的!

回答

0

如果請求 - 響應鏈中有一些Filter已經自動分析multipart/form-data請求,則會發生這種情況。由於請求主體只能被解析一次(客戶端不會多次重新發送上傳的文件),第二次嘗試解析它將不會導致任何結果。

表單操作網址envoiPjExterne.seam中的文件擴展名錶示您使用的是JSF/Seam。這通常與RichFaces結合在一起,確實帶有這樣的過濾器。

有兩種方法來解決這個問題:

  • 不要提交到JSF/Seam的看法。將該servlet映射到JSF/Seam未涵蓋的唯一URL模式,並讓表單操作指向該模式。例如。 action="uploadServlet"

  • 不要使用servlet來處理文件上傳。使用RichFaces自己的<rich:fileUpload>組件和一個簡單的JSF支持bean。