背景
上传文件服务器固然好用,但是有的时候没有文件服务器或者特定情形下的文件不使用文件服务器,而是直接存储文件内容。最常见的就是头像、验证码、压缩图片的处理。直接存储文件的内容的时候数据库中存的是base64编码的内容。(至于为什么,因为前端想要显示图片需要获得base64格式的内容)
1base64是什么
3应用:头像,验证码的处理,压缩图片
注意:使用from-data填写参数
延申
hutool工具中关于图片的处理,如图片加水印,图片剪裁
2二进制转base64
//核心代码
BASE64Encoder encoder = new BASE64Encoder();
return d encoder.encode(data);
// //处理图片
// MultipartFile file = simuSoftware.getFile();
// byte[] data = file.getBytes();
// //二进制流转Base64字符串 存储到数据库
// BASE64Encoder encoder = new BASE64Encoder();
// String simuSoftwarePicture = encoder.encode(data);
/**这里思考:为什么这样是不全的,因为是图片,所以需要让前端知道这是图片才能在读取base64内容的时候解析成图片。
*必须要contentType 标识。
*在代码中体现为 "data:" + contentType + ";base64," + base64Encoder.encode(imageBytes);
* */
//具体代码实现
MultipartHttpServletRequest mulreq = (MultipartHttpServletRequest) request;
MultipartFile file = mulreq.getFile("file");
String fileName = file.getOriginalFilename();
String contentType = file.getContentType();
byte[] imageBytes = null;
String base64EncoderImg="";
try {
imageBytes = file.getBytes();
BASE64Encoder base64Encoder =new BASE64Encoder();
base64EncoderImg = "data:" + contentType + ";base64," + base64Encoder.encode(imageBytes);
//如果解析有错误,需要加上下面这一行
// base64EncoderImg = base64EncoderImg.replaceAll("[\\s*\t\n\r]", "");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}