1:Base64 转 File
public File base64ToFile(String base64, String filePath) {
File file = new File(filePath);
byte[] buffer;
try {
BASE64Decoder base64Decoder = new BASE64Decoder();
buffer = base64Decoder.decodeBuffer(base64);
FileOutputStream out = new FileOutputStream(filePath);
out.write(buffer);
out.close();
} catch (Exception e) {
log.error("TAG", "异常信息:" + e.getMessage());
}
return file;
}
2:File 转 Base64
public String fileToBase64(String filePath) {
File file = new File(filePath);
FileInputStream inputFile;
try {
inputFile = new FileInputStream(file);
byte[] buffer = new byte[inputFile.available()];
inputFile.read(buffer);
inputFile.close();
BASE64Encoder base64Encoder = new BASE64Encoder();
Log.i("encodeFileToBase64", "encode = " + base64Encoder.encode(buffer));
return base64Encoder.encode(buffer);
} catch (Exception e) {
log.error("异常信息:" + e.getMessage());
}
return "";
}
3:Base64 转 MultipartFile
/**
* base64转MultipartFile
* @param base64String base64字符串
* @param fileName 文件名称
* @return
* @throws IOException
*/
private static MultipartFile base64ToMultipartFile(String base64String,String fileName ) {
// 解码base64字符串 (如果base64有前缀如:data:image/jpg;base64,则需要去掉前缀,我这里有前缀,所以需要去掉)
//有前缀
//byte[] decode = Base64.getDecoder().decode(base64String.split(",")[1]);
//无前缀
byte[] decode = Base64.getDecoder().decode(base64String);
// 创建字符串
String name = fileName + ".png"; // 文件名
String contentType = "image/png"; // 内容类型
return new MockMultipartFile(fileName, name, contentType, decode);
}
4:MultipartFile转 Base64
/**
* 将MultipartFile 图片文件编码为base64
*
* @param file
* @return
* @throws Exception
*/
public static String generateBase64(MultipartFile file) {
if (file == null || file.isEmpty()) {
throw new RuntimeException("图片不能为空!");
}
String contentType = file.getContentType();
byte[] imageBytes = null;
String base64EncoderImg = "";
try {
imageBytes = file.getBytes();
BASE64Encoder base64Encoder = new BASE64Encoder();
/**
* 1.Java使用BASE64Encoder 需要添加图片头("data:" + contentType + ";base64,"),
* 其中contentType是文件的内容格式。
* 2.Java中在使用BASE64Enconder().encode()会出现字符串换行问题,这是因为RFC 822中规定,
* 每72个字符中加一个换行符号,这样会造成在使用base64字符串时出现问题,
* 所以我们在使用时要先用replaceAll("[\\s*\t\n\r]", "")解决换行的问题。
*/
base64EncoderImg = "data:" + contentType + ";base64," + base64Encoder.encode(imageBytes);
base64EncoderImg = base64EncoderImg.replaceAll("[\\s*\t\n\r]", "");
} catch (IOException e) {
e.printStackTrace();
}
return base64EncoderImg;
}
此文章借鉴了一个大佬的文章: