【问题标题】:Retreive BLOB from Database with image Using Spring MVC and Thymeleaf使用 Spring MVC 和 Thymeleaf 从数据库中检索带有图像的 BLOB
【发布时间】:2019-01-25 22:01:47
【问题描述】:

我在前端使用带有休眠功能的 spring mvc 来检索存储到数据库 blob 中的图像时在前端呈现图像时遇到了一些问题。

实体:

@Lob
@Column(length = 100000)
private byte[] foto;

public byte[] getFoto() {
    return foto;
}

public void setFoto(byte[] foto) {
    this.foto = foto;
}

控制器:

@GetMapping("/view")
    public ModelMap viewVehicle(@RequestParam(value = "id", required = false) Vehicle vehicle, Model model) {
        if (vehicle == null) {
            vehicle = new Vehicle();
        }

        return new ModelMap("vehicle", vehicle);
    }

HTML:

<img th:src="*{'data:image/png;base64,'+ foto}" />

但是视图运行没有错误,但图像没有显示。

我尝试了很多在互联网上找到的解决方案,但都奏效了。

有没有考虑帮我解决这种情况?

问候

【问题讨论】:

  • 您确定foto 包含base64 编码的图像数据吗?您使用的是哪个版本的 Thymeleaf?并请发布整个视图代码; foto 变量的来源尚不清楚。对我来说可疑的另一件事是,您的 vehicle 始终是 null 并且您正在返回一个新的(空白)车辆实例。这可能是您没有看到图像的情况。请调试这种情况。
  • 你找到答案了吗?如果没有,我可以帮忙

标签: spring html blob thymeleaf


【解决方案1】:

请尝试使用以下代码将图像byte[] 数据转换为base64 编码的字符串。

您可以通过定义新属性在实体中执行此操作,也可以在返回 ModelMap 之前在控制器中执行此操作。

String base64EncodedImage = Base64.encodeBase64String(foto);

那么你就可以在你的视图中引用这个新变量了:

<img th:src="*{'data:image/png;base64,'+ base64EncodedImage}" />

请注意,要使用Base64.encodeBase64String() 方法,您应该import org.apache.commons.codec.binary.Base64

【讨论】:

    猜你喜欢
    • 2015-06-04
    • 2015-07-16
    • 2012-01-09
    • 1970-01-01
    • 2014-08-25
    • 2014-02-19
    • 2013-04-08
    • 1970-01-01
    • 2015-01-23
    相关资源
    最近更新 更多