2010-03-07 45 views
0

我想上傳一個文件,使用commons-fileupload-1.1.1.jar文件(我知道它不是最新版本,但它帶有struts 1.3.10,所以我使用相同的)。Java - Commons-fileupload.jar - 問題

現在的問題是,當我解析request(HttpServletRequest的),以獲得FileItemList一個S,我得到一個空列表。

 DiskFileItemFactory factory = new DiskFileItemFactory(); 

     File tempDir = new File("/fileUploadDirectory"); 
     tempDir.mkdir(); 

     // Set factory constraints 
     factory.setSizeThreshold(10000); 
     factory.setRepository(tempDir); 

     // Create a new file upload handler 
     ServletFileUpload upload = new ServletFileUpload(factory); 

     // Set overall request size constraint 
     upload.setSizeMax(10000); 

     // Parse the request 
     List items = upload.parseRequest(request); 
     System.out.println(items); 

     System.out.println(request.getContentLength()); 

     // Process the uploaded items 
     Iterator<FileItem> iter = items.iterator(); 
     while (iter.hasNext()) { 
      FileItem item = iter.next(); 
      if (item.isFormField()) { 
       System.out.println("File is a FormField"); 
      } else { 
       System.out.println("File is a File"); 
      } 
     } 

Q1。爲什麼我得到一個空的列表?

當我通過request.getContentLength()(如上面的代碼所示)打印請求的大小時,我得到一些數字數據(1536),我認爲它顯示了文件的長度。如果它顯示文件的長度,那麼爲什麼我沒有得到FileItem的列表?

說明:我使用Struts 1.3.10ActionForm。是造成任何問題。

注意:我解析請求時也沒有得到任何異常。

回答

3

如果列表爲空,那麼請求很可能不會作爲multipart/form-data發送。確保請求方法設置爲post和編碼類型被設置爲multipart/form-data

<form method="post" enctype="multipart/form-data"> 

(只是代替在Struts當量的HTML <form>元件,這很可能​​3210)

儘管如此,爲什麼你不使用Struts內置文件上傳組件嗎? Googling瞭解到有一個<html:file>組件需要與org.apache.struts.upload.FormFile屬性綁定。

+0

我使用'multipart/form-data'和'post'。我也嘗試過使用Struts內置的文件上傳組件。它也沒有工作,因爲我正在使用HTML的'

'標籤。當我嘗試''時,問題解決了......我不知道爲什麼'struts'不支持''..這很奇怪......但無論如何感謝... – 2010-03-07 17:39:56

+1

這並不奇怪。如果您不使用框架提供的組件,它將無法將請求與特定操作和模型正確關聯。 – BalusC 2010-03-07 17:43:33