Java 回复回复是否安全<;输入流资源>;将S3Object.getObjectContent()包装到REST控制器中?

Java 回复回复是否安全<;输入流资源>;将S3Object.getObjectContent()包装到REST控制器中?,java,spring-boot,amazon-s3,aws-java-sdk,Java,Spring Boot,Amazon S3,Aws Java Sdk,我正在开发一个SpringBoot应用程序,它应该允许用户通过指定的应用程序REST接口从AmazonS3间接下载文件。为此,我有一个REST控制器,它向用户返回InputStreamResource,如下所示: @GetMapping(path=“/download/{fileId}”) 公共响应下载FileById(@PathVariable(“fileId”)整数fileId){ 可选fileForDownload=fileService.getConcreteFileForDownloa

我正在开发一个SpringBoot应用程序,它应该允许用户通过指定的应用程序REST接口从AmazonS3间接下载文件。为此,我有一个REST控制器,它向用户返回InputStreamResource,如下所示:

@GetMapping(path=“/download/{fileId}”)
公共响应下载FileById(@PathVariable(“fileId”)整数fileId){
可选fileForDownload=fileService.getConcreteFileForDownload(fileId);
如果(!fileForDownload.isPresent()){
返回ResponseEntity.notFound().build();
}
返回ResponseEntity.ok()
.header(HttpHeaders.CONTENT\u处置,“附件;文件名=\”“+fileForDownload.get().getFilename())
.body(新的InputStreamResource(fileService.download(fileForDownload.get()));
}
文件服务中的下载方法如下所示:

@覆盖
公共输入流下载(本地化文件){
S3Object obj=s3client.getObject(bucketName,file.getFilename());
返回obj.getObjectContent();
}
我在这里担心的是,来自Amazon SDK的输入流无法在controller中显式关闭。下面是一个问题,这使我怀疑我的上述方法是否成功:

如果检索到S3对象,则应按如下方式关闭此输入流: 尽可能快,因为对象内容没有缓冲 直接从AmazonS3获取内存和流。此外,无法关闭 此流可能导致请求池被阻塞

因此,我的问题是:
在控制器中返回
ResponseEntity
是否安全?此输入流是否来自
S3Object.getObjectContent()
下载成功后自动关闭?到目前为止,我的方法已经成功运行,但我不确定未来可能产生的后果。

经过一些研究,我发现这应该适用于我的问题

dr版本:给定输入流的Spring MVC,所以我上面描述的方法应该是安全的