【问题标题】:What is the correct way to serve image file from Blob in Spring MVC controller?在 Spring MVC 控制器中从 Blob 提供图像文件的正确方法是什么?
【发布时间】: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


【解决方案1】:

我终于发现原来的代码没有错。原始 Mysql 管理网页错误地上传了 blob。在我发现 Paas 有一个秘密的新管理页面之后,可以使用二进制选项上传正确的 blob。还是很感谢cmets里所有的回复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-10-04
    • 2017-03-03
    • 1970-01-01
    • 2018-06-04
    • 2018-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多