1、CLOB与BLOB
CLOB:字符大对象,使用CHAR来保存数据。 如:保存XML文档。
BLOB:二进制大对象,二进制存储,例如(图片、视频等)
2、MultipartFile转BASE64
@RequestMapping(value = "/", method = RequestMethod.POST)
public String singleFileUpload(@RequestParam("file") MultipartFile file) {
try {
String prefix = "";
//转为base64存储到blob中
//图片二进制转 base64
BASE64Encoder base64Encoder = new BASE64Encoder();
//因转换出来的base64 存在换行
String encode = base64Encoder.encode(file.getBytes()).replaceAll("[\\s*\t\n\r]", "");
//获取文件名
String filename = file.getOriginalFilename();
//获取文件的后缀名
String suffixName = filename.split("\\.")[1];
//src解析所需的前缀
prefix += "data:image/" + suffixName;
prefix += ";base64,";
return prefix + encode;
} catch (IOException e) {
e.printStackTrace();
}
return "";
}
3、存储图片
1、实体类
public class ImageEntity {
private String id;//主键
private String src; //图片位置:base64 用户页面展示
private byte[] srcByte; //blob存储
private String prefix;
}
2、插入的处理
public void insert(ImageEntity imageEntity) {
String[] arr = imageEntity.getSrc().split("\\.");
//base 64 转 二进制
BASE64Decoder base64Decoder = new BASE64Decoder();
byte[] bytes = base64Decoder.decodeBuffer(arr[1]);
imageEntity.setSrcByte(bytes);
//执行插入的方法即可
}
3、取出的处理
public ImageEntity get() {
//执行查询的方法即可
ImageEntity imageEntity = xx();
BASE64Encoder base64Encoder = new BASE64Encoder();
String src = base64Encoder.encode(imageEntity.getSrcByte());
imageEntity.setSrc(imageEntity.getPrefix() + src); //注意:页面解析的src 需要将前缀加上
}
4、图片标签src解析需前缀(data:image/图片类型;base64,)
5、注意base64 最好是前缀与内容分开