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页面如下:
最好,
在我的web.xml文件中。 有一个filter
resourceUploadServlet org.mortbay.servlet.MultiPartFilter maxSize 2147483648
当我删除filter时问题解决了……
一些可能值得检查的事情:
- doPost()方法是否与表单中提到的servlet“AServlet”相同? 这主要是为了确保尚未读取请求,在这种情况下,不会将请求解析为FileItem对象。 一旦解析了请求,Commons FileUpload就无法再次解析; 通常,上游存在servlet和filter是造成这种情况的原因。
- 表单提交实际上是否有效? 这个问题会在不同的文件中重现吗? 理想情况下,当达到文件结束条件时,Commons Fileupload组件将不再返回任何项目,即没有更多数据要读取(内容长度标头中的字节数已从主体读取)。
PS:使用Logger类可能更好地“双重确定”是否正在进行表单和文件字段解析。
- 在GenericObjectPool中创建对象
- 用于压缩(例如LZW)字符串的Java库
- 使用apache-commons-net TelnetClient发送终端命令时如何禁用echo
- 使用org.apache.commons.net.ftp.FTPClient保护FTP
- 用Java确定另一个国家的互联网时间
- 我何时应该使用Apache Commons的Validate.isTrue,何时应该使用’assert’关键字?
- 反序列化会话数据时出现InvalidClassException错误
- PropertyPlaceholderConfigurer从XML文件读取(Apache Commons配置)
- 文件上传“multipart / form”exceptionorg.apache.commons.fileupload.FileUploadBase $ InvalidContentTypeException