【问题标题】:Apache Commons Fileupload / Tomcat cant cope with out.flush()Apache Commons Fileupload / Tomcat 无法处理 out.flush()
【发布时间】:2009-10-19 03:35:32
【问题描述】:

有谁知道一种解决方法,如果您尝试刷新 servlet 输出流,apache commons fileupload 会引发以下异常?

FileUploadException: Processing of multipart/form-data request failed. Stream ended unexpectedly

基本上,我的代码循环遍历使用 apache commons fileupload 上传的每个文件,然后尝试out.flush() 每个文件的一些统计信息。即:

    FileItemFactory factory = new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);
    List<FileItem> items = upload.parseRequest(request);

    for(FileItem field : items) {
        if (!field.isFormField() && field.getName().length()>0 && field.getName().getSize()>0) {
            ArticleImport helper = new ArticleImport(new ArticleImportResponder(user,out));
            // This helper object uses out.flush() to provide feedback to the user.
            helper.process(field.getInputStream(), user);
            }
        }
    }

该问题在 Apache Tomcat 6.0.20 中不会出现,但在早期版本中会出现。

【问题讨论】:

  • out 是在哪里定义的?它是什么?你是怎么得到它的?

标签: java file-upload apache-commons


【解决方案1】:

不幸的是,这是一个已知的错误,除了确保您使用至少 6.0.20 之外,您无能为力。

您可以检测正在运行的 tomcat 版本并使用它来确定您是否可以使用 out.flush() 使用以下调用:

javax.servlet.ServletContext.getServerInfo();

【讨论】:

  • 已知的错误究竟是什么?我在 Tomcat 和使用 Apache Commons File Upload 的 webapp 上遇到了大致相同的问题。