美文网首页
SpringBoot上传文件 MultipartFile

SpringBoot上传文件 MultipartFile

作者: BananaNo1 | 来源:发表于2019-10-18 15:03 被阅读0次
    /**
     * @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

    相关文章

      网友评论

          本文标题:SpringBoot上传文件 MultipartFile

          本文链接:https://www.haomeiwen.com/subject/pjwimctx.html