在使用JSF和JavaEE批处理进行上载时,是否可以处理文件流?

在使用JSF和JavaEE批处理进行上载时,是否可以处理文件流?,jsf,jakarta-ee,file-upload,java-batch,Jsf,Jakarta Ee,File Upload,Java Batch,我想用JavaEE批处理一个大文件,同时用JSF2.2上传该文件 有没有办法获取上传流 如果我用JSF上传一个大文件,我总是会遇到以下错误: java.lang.OutOfMemoryError: Java heap space .. Caused by: java.lang.OutOfMemoryError: GC overhead limit exceeded 的文件大小阈值可以在web.xml中的FacesServlet条目中配置,如下所示: 小脸蛋 javax.faces.webap

我想用JavaEE批处理一个大文件,同时用JSF2.2上传该文件

有没有办法获取上传流

如果我用JSF上传一个大文件,我总是会遇到以下错误:

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

的文件大小阈值可以在
web.xml
中的
FacesServlet
条目中配置,如下所示:


小脸蛋
javax.faces.webapp.FacesServlet
1048576
(注意:如果您还没有注册,因此依赖于JSF2.2+隐式servlet注册,那么您还需要在所需的URL模式上显式添加一个


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

答案取决于谁在解析请求和读取上载的文件。正如您明确提到的JSF 2.2,我们可以假设您正在为此使用其新的
吗?是的,目前我正在使用
上传文件,但如果有其他方法,我会征求建议。我会假设这一切与批处理无关(由于OOM的原因,您还没有进入该步骤),我已经发布了一个答案,以防是文件上载本身导致OOM,而不是批处理。我认为可以从(上载)中处理一些字节即使在上传完成之前,也不需要向文件系统写入任何内容。我会使用批处理来处理接收到的文件字节。“原始”Apache Commons FileUpload支持这一点(使用关键字“流模式”查阅手册)。但这需要一个自制的servlet。