gpt4 book ai didi

java - 返回在 REST Controller 中包装 S3Object.getObjectContent() 的 ResponseEntity 是否安全?

转载 作者:行者123 更新时间:2023-11-30 05:20:55 24 4
gpt4 key购买 nike

我正在开发一个 Spring Boot 应用程序,它应该允许用户通过指定的应用程序 REST 接口(interface)从 Amazon S3 间接下载文件。为此,我有一个 REST-Controller,它向用户返回一个 InputStreamResource,如下所示:

@GetMapping(path = "/download/{fileId}")
public ResponseEntity<InputStreamResource> downloadFileById(@PathVariable("fileId") Integer fileId) {
Optional<LocalizedFile> fileForDownload = fileService.getConcreteFileForDownload(fileId);

if (!fileForDownload.isPresent()) {
return ResponseEntity.notFound().build();
}

return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"" + fileForDownload.get().getFilename())
.body(new InputStreamResource(fileService.download(fileForDownload.get())));
}

文件服务中的下载方法如下所示:

@Override
public InputStream download(LocalizedFile file) {
S3Object obj = s3client.getObject(bucketName, file.getFilename());
return obj.getObjectContent();
}

我担心的是来自 Amazon SDK 的输入流无法在 Controller 中显式关闭。有以下warning in AWS documentation of the getObjectContent() method ,这让我对我的上述方法是否成功表示怀疑:

If you retrieve an S3Object, you should close this input stream as soon as possible, because the object contents aren't buffered in memory and stream directly from Amazon S3. Further, failure to close this stream can cause the request pool to become blocked.

因此我的问题是:返回ResponseEntity<InputStreamResource>是否安全在 Controller 中?这个InputStream来自 S3Object.getObjectContent()下载成功后自动关闭?到目前为止,我的方法很成功,但我不太确定 future 可能产生的后果。

最佳答案

经过一番研究,我发现 the answer ,这应该适用于我的问题。

Tl;博士版本:Spring MVC handles the closing给定的输入流,所以我上面描述的方法应该是安全的。

关于java - 返回在 REST Controller 中包装 S3Object.getObjectContent() 的 ResponseEntity<InputStreamResource> 是否安全?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59582243/

24 4 0