在SpringBootRest控制器中,java以流式方式访问多部分/表单数据中的文件

9bfwbjaz  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(303)

下面的场景:服务a收到一个多部分/表单数据请求,需要将其转发给服务b。因为请求中的文件可以是任意大小的,所以服务a需要尽快将文件流式传输到服务b。目前服务a可以接收请求,但是SpringBoot会将整个请求/文件加载到内存中,从而产生非常高的内存占用。我还尝试了经常建议使用的apachecommons fileupload包,但没有得到预期的结果。
这让我想到以下问题:
在springboot中,是否有可能以流式方式访问未提交的http请求,而不将整个内容加载到内存或文件中?
谢谢您!

ryevplcw

ryevplcw1#

不幸的是,我认为不将值加载到内存或磁盘上的临时位置就不可能接收到它。
如果查看配置,值 spring.servlet.multipart.file-size-threshold=2KB 定义spring应该在什么时候停止将对象加载到内存中,而是开始将它们写入磁盘。
如果您仍然想使用流,可以通过接受一个多部分文件并调用“getinputstream()”来轻松地完成

@PostMapping
public void yourRequest(@RequestParam("file") MultipartFile file) {
    InputStream inputStream = file.getInputStream();

    // your code
    ...
}

相关问题