文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2023-09-02 09:07

关注

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();        }    }

来源地址:https://blog.csdn.net/qq_19891197/article/details/129714253

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-服务器
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯