【发布时间】:2018-12-11 11:42:31
【问题描述】:
我正在使用 StreamingResponseBody 在春季 @RestController 流式传输一个大型外部资源。
问题:响应正文的OutputStream 是否应在此处显式关闭?
@GetMapping("/{filename}")
public ResponseEntity<StreamingResponseBody> getFile(@PathVariable String filename) {
StreamingResponseBody responseBody = outputStream -> {
resolveExternally(outputStream, response, filename);
//TODO should the stream be closed explicit here?
//outputStream.close();
};
return ResponseEntity.ok(responseBody);
}
【问题讨论】:
-
我知道,但是这个问题没有答案,所以没用。问题仍然是:应该关闭流还是不关闭?
-
不...如果您不打开/管理/拥有流,您就不会关闭它。流是在外部管理的,因此除了写入它之外,您不要关闭它。你不知道对方(管理流的)想用它做什么(可能写更多的数据)。
-
@M.Deinum 我做对了吗:如果我手动解析文件,例如在我的本地系统上,关闭 StreamingBodyResponse 中的输出流就可以了。但是如果我在外部解决它,例如通过另一个网络服务,我不应该碰它吗?以防万一,您介意将其添加为真实答案,以便我接受吗?
-
没有。你没有在这里打开输出流,所以不,你不要关闭它。您将关闭用于读取文件的
InputStream。
标签: java spring spring-mvc spring-rest spring-web