Apache commons fileupload FileItemIterator hasNext()返回false

我正在使用apache commons fileupload stream api。 但是FileItemIterator FileItemIterator iter = upload.getItemIterator(request); 在hasNext()中返回false iter.hasNext()这有什么问题?

代码和Web部分如下:

  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页面如下:

  
Description :

最好,

在我的web.xml文件中。 有一个filter

   resourceUploadServlet org.mortbay.servlet.MultiPartFilter  maxSize 2147483648   

当我删除filter时问题解决了……

一些可能值得检查的事情:

  • doPost()方法是否与表单中提到的servlet“AServlet”相同? 这主要是为了确保尚未读取请求,在这种情况下,不会将请求解析为FileItem对象。 一旦解析了请求,Commons FileUpload就无法再次解析; 通常,上游存在servlet和filter是造成这种情况的原因。
  • 表单提交实际上是否有效? 这个问题会在不同的文件中重现吗? 理想情况下,当达到文件结束条件时,Commons Fileupload组件将不再返回任何项目,即没有更多数据要读取(内容长度标头中的字节数已从主体读取)。

PS:使用Logger类可能更好地“双重确定”是否正在进行表单和文件字段解析。