通过minio服务器压缩文件的下载和解压

1:下载压缩文件到本地服务器

    //下载压缩文件
    public static void main(String[] args) {
        try {
            // 初始化MinIO客户端
            MinioClient minioClient = MinioClient.builder()
                    .endpoint("http://" + "192.168.16.188:9000")
                    .credentials("admin", "admin123456")
                    .build();

            // 下载压缩文件到本地文件系统,在temp生成的临时文件
            File zipFile = File.createTempFile("example", ".zip");
            log.info("zipFile=====" + zipFile.getPath());
            minioClient.downloadObject(DownloadObjectArgs.builder().bucket("otatest").object("ya2.zip").filename(zipFile.getAbsolutePath()).build());
    }

2:先下载压缩文件,解压出里面的文件,下载到本地服务器指定位置,注意这种下载方式很慢,同时需要注意下载的文件夹目录是否有,不然那会报错

    @SneakyThrows
    public static void main(String[] args) {

        try {
            // 初始化MinIO客户端
            MinioClient minioClient = MinioClient.builder()
                    .endpoint("http://" + "192.168.16.188:9000")
                    .credentials("admin", "admin123456")
                    .build();

            // 下载压缩文件到本地文件系统
            File zipFile = File.createTempFile("example", ".zip");
            log.info("zipFile=====" + zipFile.getPath());
            minioClient.downloadObject(DownloadObjectArgs.builder().bucket("otatest").object("模板2.zip").filename(zipFile.getAbsolutePath()).build());
            // 解压文件
            ZipInputStream zipInputStream = new ZipInputStream(new FileInputStream(zipFile),Charset.forName("GBK"));
            ZipEntry zipEntry = zipInputStream.getNextEntry();
            while (zipEntry != null) {
                File entryFile = new File(zipEntry.getName());
                File file = new File("C:\\Users\\dell\\Desktop\\22\\" + StringUtils.getFilename(entryFile.getName()));
                org.springframework.util.FileCopyUtils.copy(entryFile, file);
                zipEntry = zipInputStream.getNextEntry();
            }
            zipInputStream.closeEntry();
            zipInputStream.close();

            // 删除本地的压缩文件
            zipFile.delete();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

3:获取压缩文件流(这种方式比下载压缩文件快),解压出里面的文件,下载到本地服务器指定位置,注意这种下载方式很慢,同时需要注意下载的文件夹目录是否有,不然那会报错

    @SneakyThrows
    public static void main(String[] args) {
        MinioClient minioClient = MinioClient.builder()
                .endpoint("http://" + "192.168.16.188:9000")
                .credentials("admin", "admin123456")
                .build();
        CustomMinioClient customMinioClient = new CustomMinioClient(minioClient);
        ZipInputStream zis = null;
        long s = System.currentTimeMillis();
//        try (InputStream is = customMinioClient.getObject(GetObjectArgs.builder().bucket(getBucket()).object(objectName).build())) {
        try (InputStream is = customMinioClient.getObject(GetObjectArgs.builder().bucket("otatest").object("模板.zip").build())) {
            System.out.println(System.currentTimeMillis() - s);
            // 创建ZipInputStream,用于读取ZIP文件
            zis = new ZipInputStream(is, Charset.forName("UTF-8"));
            // 遍历ZIP文件中的所有条目
            ZipEntry entry;
            while ((entry = zis.getNextEntry()) != null) {
                // 如果当前条目是目录,则创建目录
                if (entry.isDirectory()) {
                    new File(entry.getName()).mkdirs();
                } else {
                    // 如果当前条目是文件,则解压缩该文件
                    FileOutputStream fos = new FileOutputStream(StringUtils.getFilename(entry.getName()));
                    byte[] buffer = new byte[1024];
                    int len;
                    while ((len = zis.read(buffer)) > 0) {
                        fos.write(buffer, 0, len);
                    }
                    fos.close();
                    zis.closeEntry();
                    //删除下载的文件
                    Files.delete(Paths.get(StringUtils.getFilename(entry.getName())));

                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭ZipInputStream
            if (zis != null) {
                zis.close();
            }
        }

    }

4:获取压缩文件流(这种方式比下载压缩文件快),获取压缩文件里的每一个文件流,进行操作,上传到minio

    @SneakyThrows
    public static void main(String[] args) {
        MinioClient minioClient = MinioClient.builder()
                .endpoint("http://" + "192.168.16.188:9000")
                .credentials("admin", "admin123456")
                .build();
        CustomMinioClient customMinioClient = new CustomMinioClient(minioClient);
        ZipInputStream zis = null;
        try (InputStream is = customMinioClient.getObject(GetObjectArgs.builder().bucket("otatest").object("模板.zip").build())) {
            // 创建ZipInputStream,用于读取ZIP文件
            zis = new ZipInputStream(is, Charset.forName("GBK"));
            // 遍历ZIP文件中的所有条目
            ZipEntry entry;
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] bytes = new byte[1024];
            while ((entry = zis.getNextEntry()) != null) {
                // 如果当前条目是目录,则创建目录
                if (entry.isDirectory()) {
                    new File(entry.getName()).mkdirs();
                } else {
                    while (true) {
                        int len = zis.read(bytes);
                        if (len <= 0) {
                            break;
                        }
                        bos.write(bytes);
                    }
                    bos.flush();
                    bos.close();
                    zis.closeEntry();
                    InputStream bis = new ByteArrayInputStream(bos.toByteArray());
                    minioClient.putObject(PutObjectArgs.builder()
                            .bucket("otatest")
                            .object(entry.getName())
                            .stream(bis, -1L, 10485760L)
                            .build());
                    bis.close();
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 关闭ZipInputStream
            if (zis != null) {
                zis.close();
            }
        }

    }

5:可以从压缩文件下载指定的文件

@SneakyThrows
    public static void main13(String[] args) {
        MinioClient minioClient = MinioClient.builder()
                .endpoint("http://" + "192.168.16.188:9000")
                .credentials("admin", "admin123456")
                .build();
        CustomMinioClient customMinioClient = new CustomMinioClient(minioClient);
        ZipInputStream zipIn = null;
        InputStream is = customMinioClient.getObject(GetObjectArgs.builder().bucket("otatest").object("模板.zip").build());
            // 创建ZipInputStream,用于读取ZIP文件
            zipIn = new ZipInputStream(is, Charset.forName("GBK"));
            // 遍历ZIP文件中的所有条目
            ByteArrayOutputStream bos = new ByteArrayOutputStream();
            byte[] bytes = new byte[1024];
            ZipEntry zipEntry;
            //查询下载名字,可以是数组这样就可以下载多个文件,但是要修改逻辑代码
            String[] files = {"java.txt"};
            while ((zipEntry = zipIn.getNextEntry()) != null) {
                for (String fileName:files) {
                    if (zipEntry.getName().equals(fileName)) {
                        while (true) {
                            int len = zipIn.read(bytes);
                            if (len <= 0) {
                                break;
                            }
                            bos.write(bytes);
                        }
                        bos.flush();
                        bos.close();
                    }
                }
            }
            InputStream bis = new ByteArrayInputStream(bos.toByteArray());
            bos.close();
            zipIn.closeEntry();
            zipIn.close();
            bis.close();
        
    }

6:获取压缩文件流(这种方式比下载压缩文件快),获取压缩文件里的每一个文件流,进行操作,上传到minio,这种方式推荐使用,最快

    @SneakyThrows
    public static void main(String[] args) {
        MinioClient minioClient = MinioClient.builder()
                .endpoint("http://" + "192.168.16.188:9000")
                .credentials("admin", "admin123456")
                .build();
        CustomMinioClient customMinioClient = new CustomMinioClient(minioClient);
        ZipInputStream zipIn = null;
        try {
            InputStream is = customMinioClient.getObject(GetObjectArgs.builder().bucket("otatest").object("模板.zip").build());
            // 创建ZipInputStream,用于读取ZIP文件
            zipIn = new ZipInputStream(is, Charset.forName("GBK"));
            // 遍历ZIP文件中的所有条目
            ZipEntry zipEntry;
            //查询下载名字,可以是数组这样就可以下载多个文件,但是要修改逻辑代码
            int i = 11;
            while ((zipEntry = zipIn.getNextEntry()) != null) {
                ++i;
                if (zipEntry.getSize() == 0) continue;
                minioClient.putObject(PutObjectArgs.builder()
                        .bucket("otatest")
                        .object(i + "")
                        .stream(zipIn, -1L, 10485760L)
                        .build());
                zipIn.closeEntry();
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (zipIn!=null) zipIn.closeEntry();
            if (zipIn!=null) zipIn.close();

        }
    }

  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Java中使用Minio进行文件压缩下载,您可以按照以下步骤进行操作: 1. 首先,确保您已经设置好Minio客户端的依赖项。您可以通过在pom.xml文件中添加以下依赖项来启用Minio客户端库: ```xml <dependency> <groupId>io.minio</groupId> <artifactId>minio</artifactId> <version>8.3.2</version> </dependency> ``` 2. 接下来,您需要创建一个Minio Client对象,并设置连接到Minio服务器的URL、Access Key和Secret Key。例如: ```java MinioClient minioClient = MinioClient.builder() .endpoint("https://your-minio-server-url") .credentials("your-access-key", "your-secret-key") .build(); ``` 3. 然后,您可以使用Minio Client提供的`compressBucket()`方法来压缩指定的存储桶中的文件。例如: ```java String bucketName = "your-bucket-name"; String objectName = "your-file-name"; String zipFileName = "your-zip-file-name.zip"; minioClient.compressBucket(CompressBucketArgs.builder() .bucket(bucketName) .object(objectName) .zipFileName(zipFileName) .build()); ``` 以上代码将压缩存储桶中指定名称的文件,并将压缩文件保存为指定的zip文件。 4. 最后,您可以使用Minio Client的`downloadObject()`方法来下载压缩文件。例如: ```java String zipFilePath = "your-zip-file-path"; String downloadFilePath = "your-download-file-path"; minioClient.downloadObject(DownloadObjectArgs.builder() .bucket(bucketName) .object(zipFileName) .filename(downloadFilePath) .build()); ``` 以上代码将从Minio服务器下载压缩文件,并将其保存到指定的本地路径。 请注意,上述代码仅提供了一个基本示例,您可能需要根据您的具体需求进行适当的修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值