使用 JSF 和 Java EE Batch 上传时是否可以处理文件流?

Is it possible to process a filestream while uploading with JSF and Java EE Batch?

我想在使用 JSF 2.2 上传文件时使用 Java EE Batch 处理一个大文件。

有没有办法获取上传流?

如果我使用 JSF 上传大文件,我总是 运行 出现以下错误:

java.lang.OutOfMemoryError: Java heap space
..
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded

<h:inputFile> 的文件大小阈值可以在 web.xmlFacesServlet<servlet> 条目中配置,如下所示:

<servlet>
    <servlet-name>facesServlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <multipart-config>
        <file-size-threshold>1048576</file-size-threshold>
    </multipart-config>
</servlet>

(注意:如果您还没有一个并且因此依赖于 JSF 2.2+ 隐式 servlet 注册,那么您需要在所需的 URL图案太)

任何超出 <file-size-threshold> 指定大小(上例中为 1MiB)的内容都将写入本地磁盘文件系统中的临时文件,而不是保存在服务器内存中。当服务器配置的最大 POST 大小大于可用堆时,这将避免潜在的 OOM。