【问题标题】:Can't display blob image in jsp in Spring MVC app无法在 Spring MVC 应用程序的 jsp 中显示 blob 图像
【发布时间】:2015-03-04 11:39:23
【问题描述】:

我通过Hibernate 将图像保存并加载到MySQL 5.5 数据库,在java 中为byte[],在数据库中为blob。尽管如此,当我无法在jsp 中显示它时。

我的控制器:

@RequestMapping(value = "/productPicture/{productPictureId}/edit", method = RequestMethod.GET)
public String productPictureEditGET(@PathVariable("productPictureId") int productPictureId, HttpServletRequest request, Model model) {

    ProductPictureFormBO productPicture = productPictureService.getById(productPictureId, ProductPictureFormBO.class, ProductPictureEntity.class);

    byte[] encoded=org.apache.commons.codec.binary.Base64
            .encodeBase64(productPicture.getPicture());
    String encodedString = new String(encoded);

    model.addAttribute("image",encodedString);
    model.addAttribute("productPicture", productPicture);

    return "productPicture/editView";
}

然后在 jsp 中两个元素都不显示任何东西...:

  <img src="data:image/jpeg;base64,${image}" alt="..." width="200" height="200">`
  <img src="data:image/jpeg;base64,${productPicture.picture}" width="200" height="200">`

jsp中的结果:

<img src="data:image/jpeg;base64,MTA4ODg4MTdfMTAyMDM1NjkyNTEzMzQ1MThfNzg0MzE4ODI3Mjc5Mjk0NTQ3MF9uLmpwZw=="  width="200" height="200">
<img src="data:image/jpeg;base64,[B@1666a2e3" width="200" height="200">

知道我缺少什么以及如何解决它吗?

【问题讨论】:

  • 结果 HTML 中实际生成了什么?
  • 您可能应该告诉我们image 里面有什么(假设它不是太大)。或者分享一个显示生成的 DOM 的屏幕截图..
  • 我已经更新了我的帖子...
  • 您是否需要将它们显示为数据 url 而不是常规图像?
  • 哦!你完全正确!问题不在此显示视图中,而在保存事件中,我只保存上传图像的名称而不是图像本身! :) 谢谢你帮我弄清楚发生了什么:)

标签: java spring hibernate jsp spring-mvc


【解决方案1】:

数据 URI 方案必须代表图像的内容,而不是代表文件名的字符串。

这里,

<img src="data:image/jpeg;base64,MTA4ODg4MTdfMTAyMDM1NjkyNTEzMzQ1MThfNzg0MzE4ODI3Mjc5Mjk0NTQ3MF9uLmpwZw=="  width="200" height="200">

这是10888817_10203569251334518_7843188272792945470_n.jpg的base64编码值,它根本不代表图像内容,但很明显是图像的文件名。显然 ProductPicture#getPicture() 将唯一的文件名返回为 byte[] 而不是图像的内容。

因此,要么您以错误的方式保存了图像,仅将图像的文件名而不是图像的内容保存在数据库中,要么您使用了错误的模型值(尽管我想知道将文件名保存为byte[] 而不是直接作为String)。

【讨论】:

  • 是的,我只保存了文件名而不是文件本身
猜你喜欢
  • 2011-10-21
  • 1970-01-01
  • 2013-12-20
  • 2014-10-29
  • 2014-09-19
  • 2020-11-28
  • 1970-01-01
  • 2013-04-08
  • 1970-01-01
相关资源
最近更新 更多