【发布时间】:2021-03-01 10:36:48
【问题描述】:
我有一个Spring Integration flow,它将文件异步上传到 sftp 服务器,要上传的文件来自 http 端点。最初我遇到了与here 讨论过的同样的问题,很高兴它得到了解决。
在同一个 SO 线程中我发现了这条评论。
在企业环境中,您通常会拥有无法承受这样大小的文件缓冲到内存中。可悲的是, InputStreamResource 也不起作用。到目前为止,您最好的选择是将内容复制到自己的临时文件(例如 File#createTempFile)中,您可以在处理线程结束时对其进行清理。
目前我正在将文件输入流连接到InputStreamResource 以解决这个问题,它可以完美地工作。为什么评论者说 InputStreamResource 也不起作用,AFAIK InputStream 从不将数据存储在内存中
文件上传后InputStreamResource的inputStream会自动关闭吗?
当我们说大文件时,我们在这里谈论的是文件大小。目前在我的情况下,有 2-5 Mb 的文件上传到 SFTP
我真的需要关心将我的文件上传机制更改为一种类似于存储在临时文件夹中的机制吗?
代码示例:
@PostMapping("/upload")
public void sampleEndpoint(@NotEmpty @RequestParam MultipartFile file )
throws IOException {
Resource resource = new InputStreamResource(file.getInputStream());
sftpFileService.upload(resource);
}
SftpFileService 异步上传方式:
@Async
public void upload(Resource resource){
try{
messagingGateway.upload(resource);
}catch(Exception e){
e.printStackTrace();
}
}
【问题讨论】:
标签: spring-mvc spring-integration