fourcal/src/main/java/cn/palmte/work/service/UploadService.java

74 lines
2.7 KiB
Java

package cn.palmte.work.service;
import cn.palmte.work.config.UploadProperties;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import sun.misc.BASE64Decoder;
import top.jfunc.common.datetime.DatetimeUtils;
import top.jfunc.common.utils.CommonUtil;
import top.jfunc.common.utils.FileUtil;
import java.io.File;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Date;
/**
* @author xiongshiyan at 2020/10/13 , contact me with email yanshixiong@126.com or phone 15208384257
*/
@Service
public class UploadService {
private static final Logger logger = LoggerFactory.getLogger(UploadService.class);
public static final String DATA_IMAGE_PNG_BASE64 = "data:image/png;base64,";
public static final String DATA_IMAGE_JPEG_BASE64 = "data:image/jpeg;base64,";
public static final String DATA_IMAGE_JPG_BASE64 = "data:image/jpg;base64,";
@Autowired
private UploadProperties uploadProperties;
public String upload(String base64Str){
String suffix = "png";
if (base64Str.contains(DATA_IMAGE_PNG_BASE64)) {
base64Str = base64Str.replaceAll(DATA_IMAGE_PNG_BASE64, "");
suffix = "png";
} else if (base64Str.contains(DATA_IMAGE_JPEG_BASE64)) {
base64Str = base64Str.replaceAll(DATA_IMAGE_JPEG_BASE64, "");
suffix = "jpeg";
}else if (base64Str.contains(DATA_IMAGE_JPG_BASE64)) {
base64Str = base64Str.replaceAll(DATA_IMAGE_JPG_BASE64, "");
suffix = "jpg";
}
String uploadPath = uploadProperties.getPath();
String uploadPrefix = uploadProperties.getPrefix();
String yyyyMMdd = DatetimeUtils.toStr(new Date(), "yyyyMMdd");
String saveDir = uploadPath + "/" + yyyyMMdd;
FileUtil.makeSureExistDir(saveDir);
String fileName = CommonUtil.randomString(32) + "." + suffix;
String absolutePath = saveDir + "/" + fileName;
File file = new File(absolutePath);
decodeAndWrite(base64Str , file);
return uploadPrefix + "/" + yyyyMMdd + "/" + fileName;
}
private void decodeAndWrite(String base64Str, File destFile) {
try {
// Base64解码
byte[] bytes = new BASE64Decoder().decodeBuffer(base64Str);
for (int i = 0; i < bytes.length; ++i) {
if (bytes[i] < 0) {
// 调整异常数据
bytes[i] += 256;
}
}
Files.write(Paths.get(destFile.getAbsolutePath()), bytes);
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
}
}