1. 问题
最近在项目中由于疏忽,遇到了一件刚上线就比较棘手的事: 富文本保存图片,前端直接保存图片base64数据到服务器,导致产生大量的数据,直接导致数据库打不开,上线之后页面刷新超慢,平均查询一个商品详情要10s-20s,简直忍无可忍。
2. 思路
- 富文本base64格式数据:
<p><img src="https://img-blog.csdnimg.cn/2022010705324888670.jpeg"></p>
- 将数据中的base64格式数据根据正则匹配出来,参考:base64正则
- 将base64图片数据上传到oss
- 将富文本数据的base64字符串中的图片数据替换成url
3. 代码
- 提取字符串中的base64数据
/**
* base64数据替换成oss上传后的图片路径
* @param data base64图片数据
* @param fileId 商品id
* @return 替换后的字符串
*/
public static String replaceBase64(String data, String fileId){
String pa = "data:([a-z]+\\/[a-z0-9-+.]+(;[a-z-]+=[a-z0-9-]+)?)?(;base64)?,([A-Za-z0-9+/]{4})*([A-Za-z0-9+/]{3}=|[A-Za-z0-9+/]{2}==)?";
Pattern pat = Pattern.compile(pa);
Matcher matcher = pat.matcher