/**
* @ClassName UploadFileUtil
* @Description 文件上传
* @Author leis
* @Date 2019/9/19 10:11
* @Version 1.0
**/
@Slf4j
public class UploadFileUtil {
/**
* 默认文件后缀
*/
private static Set<String> fileSuffixSet = Sets.newHashSet(".jpg", ".jpeg", ".gif", ".png", ".bmp", ".tif");
/**
* 默认文件大小
*/
private static long defaultFileSize = 5 * 1024 * 1024;
/**
* 默认文件上传路径
* 限制必须上传文件路径
*/
private static String defaultPath;
/**
* 上传单文件
* 使用默认的上传地址
*
* @param fileSize 上传文件的大小限制
* @param multipartFile 需要上传的文件
* @return 文件上传的地址
*/
public static Map<String, String> uploadFile(Long fileSize, MultipartFile multipartFile) throws IOException {
defaultFileSize = fileSize;
return uploadFile(multipartFile);
}
/**
* 上传单文件
*
* @param uploadPath 需要上传的地址
* @param fileSize 上传文件的大小限制
* @param multipartFile 需要上传的文件
* @return 文件上传的地址
*/
public static Map<String, String> uploadFile(String uploadPath, Long fileSize, MultipartFile multipartFile) throws IOException {
defaultFileSize = fileSize;
return uploadFile(uploadPath, multipartFile);
}
/**
* 上传单文件
* 检查文件大小使用默认的最大配置
*
* @param uploadPath 需要上传的地址
* @param multipartFile 需要上传的文件
* @return 文件上传的地址
*/
public static Map<String, String> uploadFile(String uploadPath, MultipartFile multipartFile) throws IOException {
defaultPath = uploadPath;
return uploadFile(multipartFile);
}
/**
* 上传单文件
* 检查文件大小使用默认的最大配置
* 使用默认的地址
*
* @param multipartFile 上传的文件
* @return map K-V
* status 上传标记 S 成功 F 失败
* path 上传成功返回路径
* message 上传失败返回异常信息
*/
private static Map<String, String> uploadFile(MultipartFile multipartFile) {
Map<String, String> resultMaps = Maps.newConcurrentMap();
resultMaps.put("status", "F");
try {
String suffix = checkFile(multipartFile);
Preconditions.checkNotNull(defaultPath, "上传地址不能为空");
File file = wrapFile(defaultPath, multipartFile.getOriginalFilename(), suffix);
multipartFile.transferTo(file);
log.info("************上传成功**********返回值:{}***", file.getPath());
resultMaps.put("status", "S");
resultMaps.put("path", file.getPath());
return resultMaps;
} catch (NullPointerException e) {
log.error("*****checkFile******{}", e.getMessage());
resultMaps.put("message", e.getMessage());
return resultMaps;
} catch (IOException e) {
e.printStackTrace();
log.error("*****上传失败*****{}", e.getMessage());
resultMaps.put("message", "上传失败");
return resultMaps;
} catch (IllegalArgumentException e) {
log.error("*****checkFile*****{}", e.getMessage());
resultMaps.put("message", e.getMessage());
return resultMaps;
}
}
/**
* 生成上传的不重名文件
*
* @param path 上传路径
* @param originalFilename 上传文件初始名称
* @param suffix 上传文件后缀
* @return 可以上传的不重名文件
*/
private static File wrapFile(String path, String originalFilename, String suffix) {
File file = new File(path + originalFilename);
if (file.exists()) {
String name = LocalDate.now().toString().replaceAll("-", "") + System.currentTimeMillis();
originalFilename = name + "." + suffix;
} else {
return file;
}
return wrapFile(path, originalFilename, suffix);
}
/**
* 检查文件是否符合需求
*
* @param multipartFile 需要上传的文件
* @return 上传文件后缀
* @throws NullPointerException
* @throws IllegalArgumentException
*/
private static String checkFile(MultipartFile multipartFile) throws NullPointerException, IllegalArgumentException {
Preconditions.checkNotNull(multipartFile, "文件不能为空");
Preconditions.checkArgument(multipartFile.getSize() < defaultFileSize, "上传文件不能超过5M");
String suffix = multipartFile.getOriginalFilename().substring(multipartFile.getOriginalFilename().lastIndexOf(".") + 1);
Preconditions.checkArgument(!fileSuffixSet.contains(suffix), "文件类型不正确");
return suffix;
}
}
需要的jar包 lombok guava