You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot邮件模板中Thymeleaf无法显示Base64图片问题排查

问题排查与解决

核心问题

你的Base64字符串缺少数据URI协议前缀,浏览器/邮件客户端无法识别纯Base64字符串为图片资源。img标签的src属性必须遵循data:[<mediatype>];base64,<data>的格式,仅传递Base64编码内容是无效的。

修复步骤

1. 修改Java转换代码,添加数据URI前缀

在生成Base64字符串时,根据图片的实际MIME类型(如PNG、JPEG)添加对应前缀。示例如下:

private static List<TaskDto> convert(List<TaskDto> taskDtos) {
    for (TaskDto task : taskDtos) {
        byte[] logoBytes = task.getAssignedToLogo();
        if (logoBytes != null && logoBytes.length > 0) {
            // 根据图片实际类型调整前缀,JPEG格式用"data:image/jpeg;base64,"
            String base64Prefix = "data:image/png;base64,";
            String base64Logo = base64Prefix + Base64.getEncoder().encodeToString(logoBytes);
            task.setAssignedToLogoString(base64Logo);
        }
    }
    return taskDtos;
}

提示:如果图片类型不固定,需要先通过字节流读取文件头判断MIME类型,再动态拼接对应前缀。

2. 验证Thymeleaf模板(无需修改)

当前模板的写法是正确的,th:src="${item.assignedToLogoString}"会直接将完整的data URI渲染到img标签的src属性中,无需额外转义处理。

额外注意事项

  • 部分老旧邮件客户端可能不支持data URI格式,若需兼容这类场景,建议将图片上传到静态资源服务器,使用HTTP URL作为img的src。
  • 确保Base64字符串无多余换行或空格,Base64.getEncoder()默认生成无换行的标准Base64编码,无需额外处理。

内容的提问来源于stack exchange,提问作者Dhruv Shantilal Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 08:13:30