【发布时间】:2014-11-07 17:48:31
【问题描述】:
我编写了一个简单的 SpringMVC 应用程序并在 Paas 上托管。我在 Mysql 中创建了一个表,其中一列是 Blob。我可以通过 Mysql 管理员上传文件。现在,我的服务器可以在浏览器中正确地提供 html 文件或 javascript 文件。但是,当我在http://myserver.com/File/ad.jpg 中提供 jpg 文件时,我的浏览器显示一个小图标,如果我保存它,Windows Image 软件显示图像已损坏。
以下是部分代码:
@RequestMapping(value="/File/**", //{name:.+}",
method = RequestMethod.GET)
public @ResponseBody void getContent(
// @PathVariable("name") String name,
HttpServletRequest request,
HttpServletResponse response) throws IOException {
String name = request.getPathInfo();
....
IOUtils.copy(blob.getBinaryStream(), out);
我发现 getServletContext() 返回 null,所以我无法获取 contentType,所以我将 Mysql 中的 contentType 保存为 ad.jpg 的 image/jpeg。我将处置设置为内联。我还应该做什么来提供 jpg?
【问题讨论】:
-
尝试返回
byte[]。永远不要直接从 Spring MVC 控制器写入输出流。 -
别忘了设置正确的内容类型。
-
@chrylis 我将 contentType 设置为 image/jpeg,并使用了 write(blob.getBytes(0, length)),但现在我得到了一个空白页面用于 ad.jpg
-
“不写入输出流”的哪一部分不清楚?
-
@chrylis,我误会了,我以为不要使用输入流。那么你是说 void getContent() 函数应该返回一个 byte[] 吗?顺便说一句,solution 的类似问题是使用 outputStream 但我的不适用于 jpg 文件
标签: java mysql image spring-mvc blob