阅读httpServletRequest中的文件帖子

时间:2011-09-13 15:18:06

标签: servlets file-upload

我有一个像这样的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();
    }
}

我的列表“项目”总是空的!

1 个答案:

答案 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。