我上传了inputtype="file"在Web应用程序中浏览的文件。问题是我可以将FileItem列表大小设为0,尽管我可以在下面看到所有上传的文件信息
inputtype="file"
FileItem
request-> JakartaMutltiPartRequest->文件属性
request
JakartaMutltiPartRequest
这是读取文件的Java代码
public InputStream parseRequestStreamWithApache(HttpServletRequest request) throws FileUploadException, IOException { InputStream is = null; FileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload upload = new ServletFileUpload(factory); List items = upload.parseRequest(request); // here the item size is 0 ,i am not sure why i am not getting my file upload in browser with type="file" // but If inspect request in debugger i can see my file realted info in request--->JakartaMutltiPartRequest----->files attribute Iterator iter = items.iterator(); while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); if (!item.isFormField()) { is = item.getInputStream(); } } return is; }
编辑:
这是JSP部分:
<form NAME="form1" action="customer/customerManager!parseRequestStreamWithApache.action" ENCTYPE="multipart/form-data" method="post" > <TABLE > <tr> <th>Upload File</th> <td> <input name="fileUploadAttr" id="filePath" type="file" value=""> </td> <td > <Input type="submit" value ="uploadFile"/> </td> </tr> </TABLE> </form>
正如我在您之前发布的对同一个问题的评论中所说,这很可能是因为您之前已经解析了请求。这些文件是请求正文的一部分,您只能解析一次。
更新:
我通常以这种方式使用commons-upload:
if (ServletFileUpload.isMultipartContent(request)) { ServletFileUpload fileUpload = new ServletFileUpload(); FileItemIterator items = fileUpload.getItemIterator(request); // iterate items while (items.hasNext()) { FileItemStream item = items.next(); if (!item.isFormField()) { is = item.openStream(); } } }