我有一个像这样的html页面:
<FORM METHOD="POST" ACTION="http://localhost:8080/Appli/page/public/envoiPjExterne.seam" enctype="multipart/form-data">
<input type="file" size="70" name="file" /><br />
<INPUT type="submit" value="Submit">
</FORM>
和这样的servlet:
protected void doPost(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
DiskFileUpload upload = new DiskFileUpload();
upload.setSizeMax(10000000);// 10 Mo
List items;
try {
items = upload.parseRequest(request);
Iterator itr = items.iterator();
while(itr.hasNext()) {
FileItem item = (FileItem) itr.next();
}
} catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
我的列表“项目”总是空的!
答案 0 :(得分:0)
如果您在请求 - 响应链中有一些Filter
已经自动解析multipart/form-data
个请求,则会发生这种情况。由于请求主体只能被解析一次(客户端不会多次重新发送上传的文件),第二次尝试解析它将不会产生任何结果。
表单的操作网址envoiPjExterne.seam
中的文件扩展名表明您使用的是JSF/Seam。这通常与RichFaces密切相关,{{3}}确实带有类似的过滤器。
有两种方法可以解决这个问题:
不要提交到JSF / Seam视图。将servlet映射到JSF / Seam未涵盖的唯一URL模式,并让表单操作指向该模式。例如。 action="uploadServlet"
。
不要使用servlet来处理文件上传。使用RichFaces自己的<rich:fileUpload>
组件和一个简单的JSF支持bean。