有没有办法在 thymeleaf 和 spring boot 中显示来自 MySql 数据库的图像?

Posted

技术标签:

【中文标题】有没有办法在 thymeleaf 和 spring boot 中显示来自 MySql 数据库的图像?【英文标题】:Is there a way to display an image from MySql database in thymeleaf and spring boot? 【发布时间】:2019-09-05 06:47:17 【问题描述】:

我创建了一个名为:department 的 mysql 数据库。我可以显示数据库中的所有其他列,除了 BLOB 格式的“徽标”。我可以将图像保存到“徽标”中,但无法在百里香表中显示。我需要一个单独的控制器来显示图像吗?

这是我的 Thymeleaf 显示图像:

<td>
<img th:src="$tempDepartment.logo" >
</td>

这是我的实体:

@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;

@Column(name="dept_name")
private String deptName;

@Lob    
@Column(name="logo")
private byte[] logo;

这是我的控制器:

//lists all departments
    @GetMapping("/departments")
    public String listDepartments(Model model) 
        List<Department> departments = departmentService.findAll();
        model.addAttribute("departments",departments);
        return "/departments/list"; // Your current thymeleaf template
    

    //adding a new department
    @GetMapping("/showFormForAdd")
    public String showFormForAdd(Model theModel) 

        Department theDepartment=new Department();
        theModel.addAttribute("department",theDepartment);

        return "/departments/department-form";

    

    //saving a department
    @PostMapping("/save")
        public String saveDepartment(@ModelAttribute("department") 
           Department theDepartment) 
            departmentService.save(theDepartment);
            return "redirect:/home/departments";
        

我希望显示数据库中的图像,但没有显示。

【问题讨论】:

请添加你的控制器方法的代码然后只能解决它......你的@RequestMapping中设置的参数是什么@.. 你好维克兰特,我没有写任何控制器来处理@RequestMapping。但是,我将在下面分享我的一些控制器代码。 【参考方案1】:

将您的byte[] 更改为Base64 图像并在html 文件中您需要尝试此操作..

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

而不是

<img th:src="$tempDepartment.logo" > 

如果你的控制器有这个参数produces = MediaType.IMAGE_PNG_VALUE,你的thymeleaf代码就可以工作了

更多详情请通过this link

【讨论】:

首先,感谢您的帮助。但不幸的是,您提供的链接没有提供解决方案。只是另一个未回答的问题。 @Sam 你真的看到那个链接吗,因为我可以在那个链接中看到一个经过验证的答案实际上是存在的......所以,请先通过它并尝试判断......谢谢【参考方案2】:

我是这样解决的:

    使用将字节数组转换为字符串的方法创建了一个类 这里类有实例方法,你也可以使用静态方法,提供类的完整路径

    public class ImageUtil public String getImgData(byte[] byteData) return Base64.getMimeEncoder().encodeToString(byteData);

    在控制器中,创建 ImageUtil 实例,并添加到模型中 model.addAttribute("imgUtil", new ImageUtil());

    在 thymeleaf HTML 文件中,使用以下代码

&lt;img class='img-thumbnail' th:src="'data:image/jpeg;base64,' + $imgUtil.getImgData(entity.imgData)" /&gt;

这里,entity 是 JPA 实体或 POJO 的一个实例

我投入了大量的时间和精力,终于解决了。 :)

如果你卡在某个地方,请告诉我

【讨论】:

以上是关于有没有办法在 thymeleaf 和 spring boot 中显示来自 MySql 数据库的图像?的主要内容,如果未能解决你的问题,请参考以下文章

spring Thymeleaf 中文乱码

Spring MVC:如何在 Thymeleaf 中获取当前 url

springboot使用thymeleaf时报html没有结束标签

Spring Boot:在没有控制器的情况下使用 thymeleaf 处理 html 文件

spring boot 与 thymeleaf : 国际化

Thymeleaf 和 Spring 引导以及 Spring 安全性不起作用