- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在开发一个 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/
现在我需要我的 Controller 根据业务逻辑返回 2 种不同类型的对象,所以我的问题是我应该使用 ResponseEntity 或者我应该使用: ResponseEntity 这种返回类型有
我知道原始类型在代码中很糟糕,而且 List和 List ,例如,是不同的东西。但是 ResponseEntity 的情况呢?和 ResponseEntity ?在 @RestController 中
在 Spring Webflux 中, ResponseEntity 与 Mono 作为休息 Controller 的返回类型有什么区别? 什么时候最合适? 跟进这个问题,假设我需要返回一个列表,或者
我正在重构一些代码,这是下面示例的更大范围。 “主”类中充满了这些 try/catch block ,并且模糊了代码正在执行的操作。 我没有使用 Spring,而是使用 JaxRs 来处理异常。这将是
我正在尝试模拟 Controller 的 post 方法。我希望它返回状态代码 201(CREATED) 。但它给出了状态代码 200。下面给出的是代码这是我的 Controller 类 packag
我经常在代码中使用的结构如下: @RestController public class HelloController { @Autowired private HelloService h
请找到下面提到的代码:我需要帮助为 ResponseEntity 编写 Mockito 条件: if(isObjectPresent(ePartnerRestRequestDTO)) {
这个问题已经有答案了: Why do I get the error "File cannot be resolved to a type"? (5 个回答) 已关闭 3 年前。 我尝试在我的其余端点
我有下面的函数,我试图用我的对象列表返回 ResponseEntity。我不知道我错过了什么。 @RequestMapping(method = RequestMethod.GET, path
我对 Spring 有点陌生。我做了以下方法: public ResponseEntity updateBorder(@Valid @RequestBody Borders borders) thro
我需要模拟一项服务。我在ResponseEntity中得到空值一边 mock 全类同学一边回答。 需要模拟的方法: public List getExpression(String expressVi
我想在浏览器中显示 Controller (使用 Spring)返回的 ResponseEntity 的主体: return new ResponseEntity<>(l.getReachableDa
我正在返回一个用于文件下载的 ResponseEntity。 @RequestMapping("/download") public ResponseEntity download(){ by
这个问题引用了问题: Setting the response content-type without using HttpServletResponse 使用以下代码: @RequestMappi
我正在开发一个 spring 3.2.7 应用程序,它通过输出字节数组 ResponseEntity 的 spring Controller 将存储在数据库中的签名作为 base64 字符串发送回用户
我对 Spring 框架还很陌生,我正在尝试通过开发示例项目来学习 也许这是一个愚蠢的问题,但我根本找不到任何帮助。 当验证规则未通过时,我的 Controller 正在使用转义字符串而不是对象的 j
如果使用@Cacheable 作为返回值'ResponseEntity',我会遇到序列化错误。 Caused by: org.springframework.data.redis.serializer
我使用 ResponseEntity 为 GET“api/v1/name”和 POST“api/v1/name”请求返回响应。 我的目标是不返回空值的响应,例如在 POST "api/v1/name"
我创建了一个通用异常 DTO,它也扩展了 RuntimeException。通过这种方式,可以在应用程序中使用它,也可以将其用作 DTO。问题是当我将 DTO 应用于 ResponseEntity 构
public void etisLogAround(ProceedingJoinPoint joinPoint, EtisLog etisLog) throws Throwable {
我是一名优秀的程序员,十分优秀!