Java 实现图片链接转 Base64 并在前端显示
工作上有一个需求是将图片链接转换为 Base64 字符串,并在前端页面上显示。
本来图片的链接是 blob storage 上的,直接在前端使用 <img>
标签加载即可。
但是需求是因为图片链接存在泄漏风险,所以需要将解决这个问题。
吐槽一下:
看了一下原来的代码实现,从 blob storage 获取的图片链接已经做了链接过期时间为 5 分钟,也不太明白为什么 5 分钟有效期会存在泄漏风险,而且如果真的有人需要把图片用于其他用途,转换也并没有什么用。 anyway, business is business, so
1. Java 后端实现图片链接转 Base64
1.1 依赖引入
JDK 依赖
1.2 实现一个工具类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import java.io.InputStream; import java.net.URL; import java.util.Base64;
public class ImageToBase64 { public static String imageUrlToBase64(String imageUrl) throws Exception { try (InputStream in = new URL(imageUrl).openStream()) { byte[] bytes = in.readAllBytes(); return Base64.getEncoder().encodeToString(bytes); } }
public static void main(String[] args) throws Exception { String url = "https://www.example.com/test.png"; String base64 = imageUrlToBase64(url); System.out.println("data:image/png;base64," + base64); } }
|
注意:图片类型(如 png、jpg)需根据实际图片类型调整 data URI 前缀。
2. 前端以 Base64 显示图片
假设后端返回的 Base64 字符串为 data:image/png;base64,xxxx...
,前端可直接用 <img>
标签展示:
1
| <img src="data:image/png;base64,xxxx..." alt="base64图片" />
|
2.1 前端完整示例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8" /> <title>Base64 图片显示</title> </head> <body> <img id="img" src="" alt="base64图片" /> <script> var base64Str = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAA..."; document.getElementById("img").src = base64Str; </script> </body> </html>
|
3. 潜在的问题
- 图片过大时,Base64 字符串会很长
- 注意图片格式与 data URI 前缀一致。
- 跨域图片可能无法直接读取,可先下载到本地服务器再转码。
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Owen's Blog!