/**
*
* @author madaha
*
* @param path 上传路径
* @param img base64图片
* @return
* @throws IOException
*/
public static String base64ToImgTransformation(String path, String imgDate) throws IOException {
//随机生成图片名
String imgid=UUID.randomUUID().toString().replaceAll("-", "");
//用于拼接图片名称+后缀格式
String str = "";
//获取图片后缀名
try {
String dataPrix = "";
//String data = "";
String [] d = imgDate.split("base64,");
if(d != null && d.length == 2){
dataPrix = d[0];
// data = d[1];
}else{
throw new Exception("上传失败,数据不合法");
}
//前台在用Ajax传base64值的时候会把base64中的+换成空格,所以需要替换回来。
imgDate = imgDate.replaceAll(" ", "+");
//图片后缀
String suffix = "";
if("data:image/jpeg;".equalsIgnoreCase(dataPrix)){//data:image/jpeg;base64,base64编码的jpeg图片数据
suffix = ".jpeg";
//去除base64中无用的部分,上传相应的图片的是去掉对应的即可
imgDate = imgDate.replaceAll("data:image/jpeg;base64,", "");
} else if("data:image/jpg;".equalsIgnoreCase(dataPrix)){//data:image/gif;base64,base64编码的gif图片数据
suffix = ".jpg";
imgDate = imgDate.replaceAll("data:image/jpg;base64,", "");
} else if("data:image/png;".equalsIgnoreCase(dataPrix)){//data:image/png;base64,base64编码的png图片数据
suffix = ".png";
imgDate = imgDate.replaceAll("data:image/png;base64,", "");
}else {
throw new Exception("上传图片格式不合法");
}
// 生成文件名
/*String files = new SimpleDateFormat("yyyyMMddHHmmssSSS")
.format(new Date())
+ (new Random().nextInt(9000) % (9000 - 1000 + 1) + 1000);*/
BASE64Decoder base64decoder = new BASE64Decoder();
//base64图片解码
byte[] byteimgDate = base64decoder.decodeBuffer(imgDate);
for (int i = 0; i < byteimgDate.length; ++i) {
// 调整异常数据
if (byteimgDate[i] < 0) {
byteimgDate[i] += 256;
}
}
//图片名
str = imgid + suffix;
//上传图片路径
String filename = path +"\\"+ imgid + suffix;
File file = new File(filename);
file.createNewFile();
if (!file.exists()) {
file.createNewFile();
}
OutputStream out = new FileOutputStream(file);
out.write(byteimgDate);
out.flush();
out.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return str;
}
最后返回的是上传成功后的图片名称,保存到数据库即可,还有一点要注意的是前端再传值到后端的时候,一定要加密,防止xss攻击