/**
* base64图片转为本地文件
*
* @param baseStr base64图片地址
* @return 图片文件
*/
private static File base64ToFile (String baseStr) {
BASE64Decoder decoder = new BASE64Decoder();
try {
Base64ImgInfo base64ImgInfo = getBase64ImgInfo(baseStr);
if (base64ImgInfo == null) {
return null;
}
byte[] b = decoder.decodeBuffer(base64ImgInfo.getImgStr());
// 处理数据
for (int i = 0; i < b.length; ++i) {
if (b[i] < 0) {
b[i] += 256;
}
}
return File.createTempFile(UUID.randomUUID().toString(), base64ImgInfo.getType());
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
/**
* 获取base64图片信息
*
* @param baseStr base64字符串
* @return base64图片信息
*/
private static Base64ImgInfo getBase64ImgInfo(String baseStr) {
//允许的图片格式(可配置)
String imgType = "jpg,png,jpeg,gif";
if (!StringUtils.isEmpty(imgType)) {
String[] imgTypes = imgType.split(",");
Pattern pattern;
Matcher matcher;
String regex;
for (String v : imgTypes) {
regex = MessageFormat.format("data:image/{0};base64,", v);
pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
matcher = pattern.matcher(baseStr);
if (matcher.lookingAt()) {
Base64ImgInfo base64ImgInfo = new Base64ImgInfo();
base64ImgInfo.setImgStr(matcher.replaceFirst(""));
base64ImgInfo.setType("." + v);
return base64ImgInfo;
}
}
}
return null;
}
@Data
public static class Base64ImgInfo {
/**
* 图片格式,比如.png
*/
private String type;
/**
* base64正文部分,去除前面data:image/png;base64,标识
*/
private String imgStr;
}
调用方法base64ToFile可以获取到base64转换的图片文件