【发布时间】:2017-03-27 07:47:40
【问题描述】:
我正在开发一个 Spring Boot 后端应用程序。
我必须从数据库中的 BLOB 字段中检索 jpg 图像并将其返回到前端。
在线搜索我找到了有关控制器应如何返回文件以显示的教程:http://www.leveluplunch.com/java/tutorials/032-return-file-from-spring-rest-webservice/
正如您在上一个教程中看到的,它执行以下操作:
@RequestMapping(value = "/", method = RequestMethod.GET, produces = "application/pdf")
public ResponseEntity<InputStreamResource> downloadPDFFile()
throws IOException {
ClassPathResource pdfFile = new ClassPathResource("pdf-sample.pdf");
return ResponseEntity
.ok()
.contentLength(pdfFile.contentLength())
.contentType(
MediaType.parseMediaType("application/octet-stream"))
.body(new InputStreamResource(pdfFile.getInputStream()));
}
因此,它返回了一个包装在 ResponseEntity 中的 InputStreamResource 对象。
过去我使用标准的 Java 字节数组。阅读文档我发现 InputStreamResource 是一个特定的 Spring 对象:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/core/io/InputStreamResource.html
所以,据我了解,我有标准的 Java InputStream 类型,它是一个抽象类,它是表示字节输入流的所有类的超类(就像我过去做过)。那么 InputStreamResource(在上一教程中使用)是 InputStream 的特定 Resource 实现。
阅读文档 Resource 是一个 Spring 接口,用于描述任何类型的资源(如图像、文件等)。
所以我怀疑这个 InputStreamResource 是否是将 JPEG 文件 作为字节数组返回到我的前端应用程序的正确选择?
我有这个疑问是因为在我阅读的官方文档中:
仅应在没有其他特定资源实现的情况下使用 适用的。特别是,更喜欢 ByteArrayResource 或任何 尽可能基于文件的资源实现。
这是一个好的解决方案吗?
【问题讨论】:
-
根据文档,如果读取是单次使用,则可以使用一个 InputStreamResource。干杯。
-
“一次性”是什么意思?
标签: spring spring-mvc spring-boot