0
点赞
收藏
分享

微信扫一扫

文件上传|文件删除

嚯霍嚯 2022-02-26 阅读 44
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());
	             }
	         }
		
	}
}

举报

相关推荐

0 条评论