文件上传处理工具类(阿里云)

@Component
public class FileUploadUtil {
    private static final Logger logger = LoggerFactory.getLogger(FileUploadUtil.class);
    static final Decoder decoder = Base64.getDecoder();
    private static String endpoint;
    private static String accesskey;
    private static String accessKeySecret;
    private static String bucketName;
    private static String accessUrl;

    public FileUploadUtil() {
    }

    @Value("${aliyun.endpoint}")
    public void setEndpoint(String endpoint) {
        endpoint = endpoint;
    }

    @Value("${aliyun.accesskey}")
    public void setAccesskey(String accesskey) {
        accesskey = accesskey;
    }

    @Value("${aliyun.accessKeySecret}")
    public void setAccessKeySecret(String accessKeySecret) {
        accessKeySecret = accessKeySecret;
    }

    @Value("${aliyun.bucketName}")
    public void setBucketName(String bucketName) {
        bucketName = bucketName;
    }

    @Value("${aliyun.accessUrl}")
    public void setAccessUrl(String accessUrl) {
        accessUrl = accessUrl;
    }

    public static Map<String, Object> multipartFileToFile(MultipartFile file, OssConfig ossConfig, Boolean b) throws Exception {
        Map<String, Object> m = new HashMap();
        int begin = file.getOriginalFilename().lastIndexOf(".");
        int last = file.getOriginalFilename().length();
        String a = file.getOriginalFilename().substring(begin, last);
        byte[] byteArr = file.getBytes();
        InputStream inputStream = new ByteArrayInputStream(byteArr);
        String url = uploadTempFileToOSS(inputStream, b, ossConfig, a);
        m.put("fileName", file.getOriginalFilename());
        m.put("fileSize", file.getSize());
        m.put("fileType", a);
        m.put("url", url);
        return m;
    }

    public static Map<String, Object> base64StringToFile(String base64, OssConfig ossConfig, Boolean b, String fileName) throws Exception {
        Map<String, Object> m = new HashMap();
        int begin = fileName.lastIndexOf(".");
        int last = fileName.length();
        String a = fileName.substring(begin, last);
        m.put("fileName", fileName);
        m.put("fileType", a);
        byte[] bytes = decoder.decode(base64.trim());
        m.put("fileSize", bytes.length);
        InputStream inputStream = new ByteArrayInputStream(bytes);
        String url = uploadTempFileToOSS(inputStream, b, ossConfig, a);
        m.put("url", url);
        return m;
    }

    public static String uploadTempFileToOSS(InputStream file, Boolean isSecret, OssConfig ossConfig, String filetype) {
        logger.info("cValidate(filetype):" + cValidate(filetype));
        if (!cValidate(filetype)) {
            throw new ZTBusinessException("失败", "文件格式不正确");
        } else {
            String fileName;
            if (isSecret) {
                if (!ossConfig.getBucketName().contains("-secret")) {
                    ossConfig.setBucketName(ossConfig.getBucketName() + "-secret");
                }
            } else if (ossConfig.getBucketName().contains("-secret")) {
                fileName = ossConfig.getBucketName().substring(0, ossConfig.getBucketName().length() - "-secret".length());
                ossConfig.setBucketName(fileName);
            }

            fileName = IDUtil.getUUID() + filetype;
            String uploadPath = "cccc_temp/temp";
            String url = OssUtil.uploadFileByInputStream(fileName, ossConfig, file, uploadPath);
            return url;
        }
    }

    public static InputStream downloadFile(String url, OssConfig ossConfig, String isSecret) {
        if (url.contains("home/upload/")) {
            ossConfig = new OssConfig();
            ossConfig.setBucketName(bucketName);
            ossConfig.setAccessKeyId(accesskey);
            ossConfig.setAccessKeySecret(accessKeySecret);
            ossConfig.setAccessUrl(accessUrl);
            ossConfig.setEndpoint(endpoint);
        }

        if (ossConfig.getBucketName().contains("-secret")) {
            String temp = ossConfig.getBucketName().substring(0, ossConfig.getBucketName().length() - "-secret".length());
            System.err.println(temp);
            ossConfig.setBucketName(temp);
        }

        logger.info("下载文件路径 OSS绝对路径:" + url);
        if (null != url && !"".equals(url)) {
            String key = url.substring(url.lastIndexOf("/") + 1, url.length());
            logger.info("下载文件路径  key值:" + key);
            InputStream file = OssUtil.downloadByInputStream(url, ossConfig);
            return file;
        } else {
            return null;
        }
    }

    public static InputStream downloadFileSec(String url, OssConfig ossConfig, String isSecret) {
        if (url.contains("home/upload")) {
            ossConfig = new OssConfig();
            ossConfig.setBucketName(bucketName);
            ossConfig.setAccessKeyId(accesskey);
            ossConfig.setAccessKeySecret(accessKeySecret);
            ossConfig.setAccessUrl(accessUrl);
            ossConfig.setEndpoint(endpoint);
            logger.info("ossConfig" + ossConfig.toString());
        }

        if (!ossConfig.getBucketName().contains("-secret")) {
            ossConfig.setBucketName(ossConfig.getBucketName() + "-secret");
        }

        logger.info("下载文件路径 OSS绝对路径:" + url);
        if (null != url && !"".equals(url)) {
            String key = url.substring(url.lastIndexOf("/") + 1, url.length());
            logger.info("下载文件路径  key值:" + key);
            InputStream file = OssUtil.downloadByInputStream(url, ossConfig);
            return file;
        } else {
            return null;
        }
    }

    public static String getFileName(String key) {
        String[] temp = key.split("/");
        String fileName = temp[temp.length - 1];
        return fileName;
    }

    public static File getFile(InputStream in, String destFileName) {
        File file = null;

        try {
            file = new File(destFileName);

            try {
                FileOutputStream fout = new FileOutputStream(file);
                int l = true;
                byte[] tmp = new byte[1024];

                int l;
                while((l = in.read(tmp)) != -1) {
                    fout.write(tmp, 0, l);
                }

                fout.flush();
                fout.close();
            } catch (Exception var10) {
                var10.printStackTrace();
            } finally {
                in.close();
            }
        } catch (Exception var12) {
            var12.printStackTrace();
        }

        return file;
    }

    private static boolean cValidate(String str) {
        str = str.toLowerCase();
        String badStr = ".jpg,.png,.jpeg,.gif,.xls,.xlsx,.doc,.docx,.txt,.pdf,.JPG,.bmp,.webp,.tiff,.pptxv,.zip,.rar,.7z,.lzh,.rft,.msg,.wps,.dps,.vsd,.prn,.ai,.cad,.et,.swf,.ppt,.jpe,.ofd,.OFD,.pptx,.tif,.jfif,.kz,.dat,.GCFX,.eszf,.oxps,.amr,.pic,.eps,.xdf,.DXF,.xps,.rtf,";
        String[] badStrs = badStr.split(",");
        logger.info("下载文件类型:" + str);

        for(int i = 0; i < badStrs.length; ++i) {
            if (str.equals(badStrs[i])) {
                return true;
            }
        }

        return false;
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值