package com.hundsun.lightdata.banner.utils;
import com.hundsun.jrescloud.common.exception.BaseBizException;
import com.hundsun.lightdata.common.enumpackage.ResponseEnum;
import com.hundsun.lightdata.common.util.UniqueIdUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.multipart.MultipartFile;
import java.io.File;
import java.io.IOException;
import java.util.Arrays;
import java.util.Optional;
import java.util.StringJoiner;
import java.util.stream.Collectors;
/**
* @Author : 骑士李四
* @Date : Created in 13:47 2022/2/14
* @Description :
* @since 3.0
*/
@Slf4j
public class FileUtils {
/**
* 上传
* @param multipartFile
* @param uploadPath
*
* @param host
* @return
*/
public static String upload(MultipartFile multipartFile, String uploadPath,String host,String module){
assertMultipartFile(multipartFile);
String originalFilename = multipartFile.getOriginalFilename();
String fileName =
originalFilename.substring(0, originalFilename.lastIndexOf(".")) + "_" + UniqueIdUtil.getUuid32() + originalFilename.substring(originalFilename.lastIndexOf("."));
// 上传至绝对路径
File dest = new File(stringConcat(uploadPath,module, fileName));
File fileParent = dest.getParentFile();
try {
if (!fileParent.exists()) {
fileParent.mkdirs();
}
dest.createNewFile();
multipartFile.transferTo(dest.getAbsoluteFile());
} catch (IOException e) {
log.error("[文件上传异常]===>file:{},e:{}", multipartFile, e);
throw new BaseBizException(ResponseEnum.ERROR_FILE_UPLOAD_ERROR.getErrorCode(), ResponseEnum.ERROR_FILE_UPLOAD_ERROR.getErrorInfo());
}
// 返回文件的访问url
String url = stringConcat(host, uploadPath, module, fileName);
return url;
}
/**
* 文件合法性校验
* @author lipeng
* @param file
*/
private static void assertMultipartFile(MultipartFile file) {
// 非空校验
if (file.isEmpty()) {
throw new BaseBizException(ResponseEnum.ERROR_EMPTY_FILE.getErrorCode(), ResponseEnum.ERROR_EMPTY_FILE.getErrorInfo());
}
String originalFilename = file.getOriginalFilename();
if (StringUtils.isEmpty(originalFilename)){
throw new BaseBizException(ResponseEnum.ERROR_EMPTY_FILE.getErrorCode(), ResponseEnum.ERROR_EMPTY_FILE.getErrorInfo());
}
// 上传文件类型校验
int i = originalFilename.split("\\.").length - 1;
String fileType = originalFilename.split("\\.")[i];
// String fileType = Optional.ofNullable(file.getOriginalFilename())
// .map(fileName -> fileName.split("\\.")[1])
// .orElse("unknown");
String supportFileType = "jpg,jpeg,png,webp";
boolean isFileTypeIllegal = !Arrays.stream(supportFileType.split(",")).collect(Collectors.toList()).contains(fileType);
if (isFileTypeIllegal) {
throw new BaseBizException(ResponseEnum.ERROR_FILE_TYPE_NOT_SUPPORT.getErrorCode(), ResponseEnum.ERROR_FILE_TYPE_NOT_SUPPORT.getErrorInfo());
}
}
/**
* 拼接字符串方法
*
* @param args
* @return
*/
private static String stringConcat(String... args) {
StringJoiner stringJoiner = new StringJoiner(File.separator);
Arrays.asList(args).forEach(stringJoiner::add);
String s = stringJoiner.toString();
return s;
}
/**
文件删除
*/
private static void deleteFile(Banner ban){
if (ban.getImgUrl()!=null && !Objects.equals(ban.getImgUrl(),banner.getImgUrl())){
File file = new File(ban.getImgUrl());
if (file.isFile() && file.exists()) {
file.delete();
log.info("[visual] delete imgFile url:{} success",ban.getImgUrl());
}
}
}
}
文件上传|文件删除
于 2022-02-26 20:04:52 首次发布