我想在使用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.xml
中FacesServlet
的<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模式上显式地添加一个<servlet-mapping>
)
超过<file-size-threshold>
中指定的大小(在上面的示例中为1MiB)的任何内容都将被写入本地磁盘文件系统中的临时文件中,而不是保存在服务器内存中。当服务器配置的最大POST大小大于可用堆时,这将避免潜在的OOM。