下面的场景:服务a收到一个多部分/表单数据请求,需要将其转发给服务b。因为请求中的文件可以是任意大小的,所以服务a需要尽快将文件流式传输到服务b。目前服务a可以接收请求,但是SpringBoot会将整个请求/文件加载到内存中,从而产生非常高的内存占用。我还尝试了经常建议使用的apachecommons fileupload包,但没有得到预期的结果。这让我想到以下问题:在springboot中,是否有可能以流式方式访问未提交的http请求,而不将整个内容加载到内存或文件中?谢谢您!
ryevplcw1#
不幸的是,我认为不将值加载到内存或磁盘上的临时位置就不可能接收到它。如果查看配置,值 spring.servlet.multipart.file-size-threshold=2KB 定义spring应该在什么时候停止将对象加载到内存中,而是开始将它们写入磁盘。如果您仍然想使用流,可以通过接受一个多部分文件并调用“getinputstream()”来轻松地完成
spring.servlet.multipart.file-size-threshold=2KB
@PostMapping public void yourRequest(@RequestParam("file") MultipartFile file) { InputStream inputStream = file.getInputStream(); // your code ... }
1条答案
按热度按时间ryevplcw1#
不幸的是,我认为不将值加载到内存或磁盘上的临时位置就不可能接收到它。
如果查看配置,值
spring.servlet.multipart.file-size-threshold=2KB
定义spring应该在什么时候停止将对象加载到内存中,而是开始将它们写入磁盘。如果您仍然想使用流,可以通过接受一个多部分文件并调用“getinputstream()”来轻松地完成