Apache commons fileupload FileItemIterator hasNext() returns false

匿名 (未验证) 提交于 2019-12-03 02:28:01

问题:

I'm using the apache commons fileupload stream api. But the FileItemIterator FileItemIterator iter = upload.getItemIterator(request); returns false in its hasNext() iter.hasNext() What is wrong with this?

The code and the web part is as follows:

  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {      /**      * Apache commons file upload method will be used      */     // Check that we have a file upload request     boolean isMultipart = ServletFileUpload.isMultipartContent(request);      if (isMultipart) {         try {             // Create a new file upload handler             ServletFileUpload upload = new ServletFileUpload();             // Parse the request             FileItemIterator iter = upload.getItemIterator(request);              while (iter.hasNext()) {                 FileItemStream item = iter.next();                 String name = item.getFieldName();                 InputStream stream = item.openStream();                 if (item.isFormField()) {                     System.out.println("Form field " + name + " with value " + Streams.asString(stream) + " detected.");                 } else {                     System.out.println("File field " + name + " with file name " + item.getName() + " detected.");                     // Process the input stream                     //...                 }             }          } catch (FileUploadException ex) {               Logger.getLogger(ResourceUploadServlet.class.getName()).log(Level.SEVERE, null, ex);          }     } 

jsp page is as follows:

 <form action="AServlet" method="POST"               enctype="multipart/form-data">                             <input type="file" name="Content" />                             Description : <input  type="text" name="Description" />                         <input type="submit" value="Submit" />          </form> 

Best,

回答1:

In my web.xml file. There was a filter

    <filter>         <filter-name>resourceUploadServlet</filter-name>         <filter-class>org.mortbay.servlet.MultiPartFilter</filter-class>         <init-param>             <param-name>maxSize</param-name>             <param-value>2147483648</param-value>         </init-param>     </filter> 

When i remove the filter the problem is solved...



回答2:

A few things that might be worth checking for:

  • Is the doPost() method the same as that of the servlet "AServlet" referred to in the form? This is primarily to ensure that the request has not already been read, in which case parsing of the request into FileItem objects will not happen. A request once parsed, cannot be parsed again by Commons FileUpload; usually the presence of servlets and filters upstream is responsible for this condition.
  • Is the form submit actually working? And does the issue recur with different files? Ideally, the Commons Fileupload component will not return any more items when the End Of File condition has been reached, i.e. there is no more data to read (the number of bytes in content-length header has been read from the body).

PS: It might be better to use the Logger class to be 'doubly sure' on whether the Form and File field parsing is being done or not.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!