我想在使用 JSF 2.2 上传文件时使用 Java EE Batch 处理大文件。
有没有办法获取上传流?
如果我使用 JSF 上传一个大文件,我总是会遇到以下错误:
java.lang.OutOfMemoryError: Java heap space
..
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
我想在使用 JSF 2.2 上传文件时使用 Java EE Batch 处理大文件。
有没有办法获取上传流?
如果我使用 JSF 上传一个大文件,我总是会遇到以下错误:
java.lang.OutOfMemoryError: Java heap space
..
Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded
文件大小阈值<h:inputFile>
可以在in的入口<servlet>
配置如下:FacesServlet
web.xml
<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 注册,那么您还需要<servlet-mapping>
在所需的 URL 模式上显式添加一个)
超出<file-size-threshold>
指定大小(上例中为 1MiB)的任何内容都将写入本地磁盘文件系统中的临时文件,而不是保存在服务器内存中。当服务器配置的最大 POST 大小大于可用堆时,这将避免潜在的 OOM。