oss对zip包中的所有文件进行上传并且对每个获取文件md5值

 上传zip包方法

 public static List<String> uploadZipMultiFile(MultipartFile fileData) {
        List<String> urls = new ArrayList<>();
        ZipInputStream zip = new ZipInputStream(fileData.getInputStream(), Charset.forName("UTF-8"));
        ZipEntry fileEntry;
        String env = "resource/";
        
        while ((fileEntry = zip.getNextEntry()) != null) {
            if (!fileEntry.isDirectory()) {
                String filename = fileEntry.getName();
                String suffix = StringUtils.substringAfterLast(filename, ".");
                filename = env + filename;

                @Cleanup ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();
                byte[] byte_s=new byte[1024];
                int num;
                while((num=zip.read(byte_s,0,byte_s.length))>-1) {//通过read方法来读取文件内容
                    byteArrayOutputStream.write(byte_s, 0, num);
                }
                byte[] byte_s_=byteArrayOutputStream.toByteArray();
                String md5 = DigestUtils.md5Hex(byte_s_);
                createFolder(env);
                uploadFile(filename,byte_s_);
                filename= filename+"?md5="+md5;
                if (StringUtils.contains(contentType(suffix), "image")) {
                    urls.add(OSS_IMAGE_HOST + filename);
                } else {
                    urls.add( OSS_HOST + filename);
                }
            }
        }
        zip.close();
        return urls;
    }

    /**
     * @param key
     * @param content 文件内容
     * @throws Exception
     */
    private static void uploadFile(String key, byte[] content) throws Exception {
        ObjectMetadata objectMeta = new ObjectMetadata();
        objectMeta.setContentLength(content.length);
        @Cleanup InputStream input = new ByteArrayInputStream(content);
        client.putObject(OSS_BUCKET, key, input, objectMeta);
    }

    /**
     * 创建目录
     *
     * @param path 目录结构,这个有要求必须是 "xxx/xxx/" 以目录名开头,/结尾
     * @throws IOException
     */
    private static void createFolder(String path) throws IOException {
        if (folderCache.containsKey(path)) return;

        ObjectMetadata objectMeta = new ObjectMetadata();
        byte[] buffer = new byte[0];
        objectMeta.setContentLength(0);
        try (ByteArrayInputStream in = new ByteArrayInputStream(buffer)) {
            client.putObject(OSS_BUCKET, path, in, objectMeta);
        }

        folderCache.put(path, true);
    }

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值