java处理富文本图片保存数据库

编程入门 行业动态 更新时间:2024-10-28 20:29:18

java处理富<a href=https://www.elefans.com/category/jswz/34/1771357.html style=文本图片保存数据库"/>

java处理富文本图片保存数据库

在接收富文本时,数据库接收含有图片内容,图片会自动转换为Base64编码保存到数据库,导数据库性能降低。

解决:在接收富文本内容时,将接收到的图片转换为文件上传到Minio(Minio具体使用可参考文档),然后将base64编码替换为图片地址保存

用到的工具类

使用正则表达式提取接收内容的Base64编码工具类

import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;public class ImgBaseUtil {public static List<String> getImgStr(String htmlStr) {List<String> list = new ArrayList<>();String img = "";Pattern p_image;Matcher m_image;// String regEx_img = "<img.*src=(.*?)[^>]*?>"; //图片链接地址String regEx_img = "<img.*src\\s*=\\s*(.*?)[^>]*?>";p_image = Patternpile(regEx_img, Pattern.CASE_INSENSITIVE);m_image = p_image.matcher(htmlStr);while (m_image.find()) {// 得到<img />数据img = m_image.group();// 匹配<img>中的src数据Matcher m = Patternpile("src\\s*=\\s*\"?(.*?)(\"|>|\\s+)").matcher(img);while (m.find()) {list.add(m.group(1));}}return list;}
}

将Base64编码转换为文件流的工具类

import org.springframework.web.multipart.MultipartFile;
import sun.misc.BASE64Decoder;import java.io.*;public class BASE64DecodedMultipartFile implements MultipartFile {private final byte[] imgContent;private final String header;public BASE64DecodedMultipartFile(byte[] imgContent, String header) {this.imgContent = imgContent;this.header = header.split(";")[0];}@Overridepublic String getName() {return System.currentTimeMillis() + Math.random() + "." + header.split("/")[1];}@Overridepublic String getOriginalFilename() {return System.currentTimeMillis() + (int) Math.random() * 10000 + "." + header.split("/")[1];}@Overridepublic String getContentType() {return header.split(":")[1];}@Overridepublic boolean isEmpty() {return imgContent == null || imgContent.length == 0;}@Overridepublic long getSize() {return imgContent.length;}@Overridepublic byte[] getBytes() throws IOException {return imgContent;}@Overridepublic InputStream getInputStream() throws IOException {return new ByteArrayInputStream(imgContent);}@Overridepublic void transferTo(File dest) throws IOException, IllegalStateException {new FileOutputStream(dest).write(imgContent);}public static MultipartFile base64ToMultipart(String base64) {try {String[] baseStrs = base64.split(",");BASE64Decoder decoder = new BASE64Decoder();byte[] b = new byte[0];b = decoder.decodeBuffer(baseStrs[1]);for (int i = 0; i < b.length; ++i) {if (b[i] < 0) {b[i] += 256;}}return new BASE64DecodedMultipartFile(b, baseStrs[0]);} catch (IOException e) {e.printStackTrace();return null;}}}

内容接收并完成处理工具类

public class RichTextUtil {/**** @param text 富文本内容* @return  返回处理图片后的数据*/public  String richText(String text,MinioUtils minioUtils,MinioConfig minioConfig){String s=new String(text);String result=null;//返回结果List<String> imgStr = ImgBaseUtil.getImgStr(s); //每组base64编码图片if (imgStr.isEmpty()){return text;}for (String s1:imgStr){ //每个base64转换并上传String s2= UUID.randomUUID().toString().replaceAll("-","")+".jpg"; //新的文件链接//上传MultipartFile multipartFile = BASE64DecodedMultipartFile.base64ToMultipart(s1);assert multipartFile != null;minioUtils.putObject1(multipartFile,minioConfig.getBucketName(),s2);String foreverUrl=minioConfig.getEndpoint()+":"+minioConfig.getPort()+"/"+minioConfig.getBucketName()+"/"+s2;//永久链接if (Objects.isNull(result)){result=s.replace(s1,foreverUrl); //第一次替换}result=result.replace(s1,foreverUrl); //前边替换过,继续替换}return result;}
}
配合Minio工具类使用
    @GetMapping("/tss")public String dmo(@RequestBody Entity entity) throws IOException {String s=entity.getContent();//接收到的内容RichTextUtil richTextUtil = new RichTextUtil();String s1 = richTextUtil.richText(s,minioUtils,minioConfig);entity.setContent(s1);//最后将转换过的内容替换就行//数据库保存一下实体类内容return entity;}

Minio使用可查询相关资料或了解本博客SpringBoot对Minio的简单使用链接:

更多推荐

java处理富文本图片保存数据库

本文发布于:2024-02-26 20:12:48,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1703748.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:文本   数据库   图片   java

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!