在Spring MVC app中无法在jsp中显示blob图像

时间:2015-01-06 18:29:48

标签: java spring hibernate jsp spring-mvc

我通过MySQL 5.5将图像保存并加载到Hibernate数据库,在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">

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

1 个答案:

答案 0 :(得分:2)

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

下面,

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

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

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