SpringBoot上传文件 MultipartFile

2019-10-18  本文已影响0人  BananaNo1
/**
 * @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

上一篇下一篇

猜你喜欢

热点阅读