fourcal/src/main/java/cn/palmte/work/utils/UploadUtil.java

183 lines
5.3 KiB
Java
Raw Normal View History

2021-10-28 08:09:50 +00:00
package cn.palmte.work.utils;
import cn.palmte.work.config.Constant;
import cn.palmte.work.pojo.UploadResult;
import net.logstash.logback.encoder.org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.ResourceUtils;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
import java.util.UUID;
/**
*
*
* @author pengqiang
* @date 2018/5/3
*/
public class UploadUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(UploadUtil.class);
/**
*
*/
private static final String[] ALLOWED_FILE_EXTENSION = {
//image
"jpeg","jpg", "jpg", "bmp", "gif", "png",
//app
"apk", "ipa",
//file
"xls", "xlsx", "txt", "doc", "docx", "pdf",
//voice
"mp3", "wma", "wav",
//video
2023-01-05 03:56:02 +00:00
"avi", "rmvb", "mp4", "mpeg", "wmv", "mkv",
//
"zip", "rar", "7z"
2021-10-28 08:09:50 +00:00
};
private UploadUtil() {
}
/**
* classpath:/static/upload/
*
* @return
*/
public static String getDefaultUploadPath() {
String staticPath = "";
try {
URL url = ResourceUtils.getURL("classpath:");
//获取跟目录
File path = new File(url.getPath());
if (!path.exists()) {
path = new File("");
}
File upload = new File(path.getAbsolutePath(), "static/upload/");
if (!upload.exists()) {
boolean mkRes = upload.mkdirs();
if (!mkRes) {
LOGGER.error("mkdirs has false, path:{}", upload.getAbsolutePath());
}
}
staticPath = upload.getAbsolutePath();
} catch (FileNotFoundException e) {
}
return staticPath;
}
/**
*
*/
/**
*/
public static UploadResult upload(MultipartFile file, String uploadPath , String uploadPrefix) {
UploadResult result = new UploadResult(Constant.STATUS_FAILED);
if (file == null) {
result.setMsg("文件为空");
return result;
}
boolean isDev = false;
if (StringUtils.isBlank(uploadPath)) {
uploadPath = getDefaultUploadPath();
isDev = true;
}
//文件名
String fileName = file.getOriginalFilename();
result.setOriginName(fileName);
int endIndex = fileName.lastIndexOf('.');
String prefix = fileName.substring(0, endIndex);
result.setName(prefix);
//文件后缀 如png
String suffix = fileName.substring(endIndex + 1);
if (!Arrays.asList(ALLOWED_FILE_EXTENSION).contains(suffix)) {
result.setMsg("不允许上传该类型的文件");
return result;
}
String uuid = UUID.randomUUID().toString().replace("-", "");
boolean ispic = isPic(suffix);
String dateString = new SimpleDateFormat("yyyyMMdd").format(new Date());
//保存的新名字
2022-08-10 10:24:30 +00:00
String newName = prefix + "_" + DateKit.toStr(new Date(), "yyyyMMddHHmmss") + "." + suffix;
2021-10-28 08:09:50 +00:00
result.setNewName(newName);
String path = "file/" + dateString + "/" + newName;
if (ispic) {
path = "image/" + dateString + "/" + newName;
}
File dest = new File(uploadPath + "/" + path);
LOGGER.info(dest.getAbsolutePath());
saveFile(file, dest);
String url1 = uploadPrefix + "/" + path;
LOGGER.info(url1);
result.setUrl(url1);
if (isDev) {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest();
String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath();
String url = basePath + uploadPrefix + "/" + path;
LOGGER.info(url);
result.setUrl(url);
}
result.setStatus(Constant.STATUS_SUCCESS);
return result;
}
/**
*
*/
private static void saveFile(MultipartFile source, File dest) {
//判断文件父目录是否存在
if (!dest.getParentFile().exists()) {
boolean res = dest.getParentFile().mkdirs();
if (!res) {
LOGGER.info("mkdir has false, path: {} ", dest.getParentFile().getAbsolutePath());
}
}
try {
//保存文件
source.transferTo(dest);
} catch (IOException e) {
}
}
/**
*
*/
public static boolean isPic(String suffix) {
boolean ispic = false;
if (StringUtils.isBlank(suffix)) {
return ispic;
}
ispic = Arrays.asList(new String[]{"png", "jpg", "jpeg", "bmp", "gif"}).contains(suffix);
return ispic;
}
}