压缩Minio桶中的文件为ZIP,并通过 HTTP 响应输出

server/2024/11/14 19:37:20/
http://www.w3.org/2000/svg" style="display: none;">

注: 这里压缩包的名称默认为 bucketName.zip 可根据需求情况修改

​ 压缩后的路径和Minio文件路径一直

    /*** 下载并压缩 Minio 桶中的文件,并通过 HTTP 响应输出** @param bucketName 桶名称* @param response   HTTP 响应对象*/public static void downloadMinioFileToZip(String bucketName, HttpServletResponse response){downloadMinioFileToZip(bucketName, "", response);}/*** 下载并压缩 Minio 桶中的文件,并通过 HTTP 响应输出** @param bucketName 桶名称* @param folderPath 文件夹路径(可为空) 示例: data/png/* @param response   HTTP 响应对象*/public static void downloadMinioFileToZip(String bucketName, String folderPath, HttpServletResponse response) {try {// 如果 folderPath 为空,列出整个桶中的文件if (folderPath == null || folderPath.isEmpty()) {// 根目录folderPath = "";}// 设置 HTTP 响应头response.setContentType("application/zip");response.setHeader("Content-Disposition", "attachment;filename=" + bucketName + ".zip");// 创建 ZipOutputStream,将文件写入 response 的输出流try (ZipOutputStream zipOut = new ZipOutputStream(response.getOutputStream())) {// 列出文件夹中的所有对象Iterable<Result<Item>> results = minioClient.listObjects(ListObjectsArgs.builder().bucket(bucketName).prefix(folderPath).recursive(true).build());// 下载并压缩文件夹中的所有对象for (Result<Item> result : results) {Item item = result.get();String objectName = item.objectName();log.info("找到对象: {}", objectName);// 跳过目录对象,确保只处理实际文件if (objectName.endsWith("/")) {continue;}// 为每个对象创建一个新的 ZipEntry(压缩包中的文件条目)ZipEntry zipEntry = new ZipEntry(objectName);zipOut.putNextEntry(zipEntry);// 从 MinIO 获取对象输入流try (InputStream stream = minioClient.getObject(GetObjectArgs.builder().bucket(bucketName).object(objectName).build())) {// 将文件数据写入压缩包byte[] buf = new byte[8192];int bytesRead;while ((bytesRead = stream.read(buf)) != -1) {zipOut.write(buf, 0, bytesRead);}// 关闭当前文件条目zipOut.closeEntry();log.info("文件压缩成功: {}", objectName);} catch (Exception e) {log.error("下载并压缩文件时发生错误: {}", e.getMessage(), e);}}log.info("所有文件已成功压缩并通过响应输出。");} catch (IOException e) {log.error("创建压缩包时发生错误: {}", e.getMessage(), e);}} catch (MinioException | InvalidKeyException | NoSuchAlgorithmException e) {log.error("发生错误: {}", e.getMessage(), e);}}
示例接口

测试桶目录:

saas 桶名称

​ file1.img

​ file1.img

​ file1.img

​ tif ----------- 文件夹
​ innerFile1.img
​ innerFile1.img

    @GetMapping("/testDownload")public void testDownload(HttpServletResponse response) {// 压缩指定文件夹文件MinioUtils.downloadMinioFileToZip("saas","tif/", response);// 不指定MinioUtils.downloadMinioFileToZip("saas", response);}

Minio相关配置及工具类在这篇中有描述

Minio工作类MinioUtils的配置及使用示例


http://www.ppmy.cn/server/141224.html

相关文章

造纸厂会用到哪些自动化备品备件

以下是一些造纸厂常用的自动化备品备件&#xff1a; 造纸机设备配件&#xff1a; 烘缸、网笼、压榨辊等造纸机核心部件的备品备件&#xff0c;用于确保造纸机的正常运行和纸张的质量。轴承座、导辊瓦架等支撑和传动部件&#xff0c;保证造纸机的稳定性和精度。气垫式流浆箱、水…

csrf令牌

csrf get请求 路由 // index.php Route::get(/, function () {// return view(welcome);return view(login); });Route::get(d3,function(Request $request){echo "输入的内容是" . "<font color>".$request -> input(mytext)."</fon…

Spark 共享变量:广播变量与累加器解析

Spark 的介绍与搭建&#xff1a;从理论到实践_spark环境搭建-CSDN博客 Spark 的Standalone集群环境安装与测试-CSDN博客 PySpark 本地开发环境搭建与实践-CSDN博客 Spark 程序开发与提交&#xff1a;本地与集群模式全解析-CSDN博客 Spark on YARN&#xff1a;Spark集群模式…

当一个Java线程进入一个对象的一个 synchronized 方法后,其它线程是否可进入此对象的其它方法?

大家好&#xff0c;我是锋哥。今天分享关于【当一个Java线程进入一个对象的一个 synchronized 方法后&#xff0c;其它线程是否可进入此对象的其它方法?】面试题。希望对大家有帮助&#xff1b; 当一个Java线程进入一个对象的一个 synchronized 方法后&#xff0c;其它线程是否…

AI赋能·创新视界——冠捷科技集团亮相第七届中国国际进口博览会

摘要:展示创新技术、前沿应用及一体化方案生态,助推数智化产业蓬勃发展! 新时代,共享未来;新风貌,全球共进!11月5日,第七届中国国际进口博览会于国家会展中心(上海)盛大启幕。此次进博会展览展示面积超42万平方米,152个国家、地区和国际组织参加国家展和企业展,集中展示400多项…

嵌入式学习-网络高级-Day01

嵌入式学习-网络高级-Day01 【1】Modbus协议 起源 分类 优势 应用场景 【2】Modbus TCP 特点 组成 报文头&#xff1a;7个字节 寄存器&#xff08;存储数据&#xff09; 功能码 总结 练习 【3】工具安装 Modbus Slave、Poll安装 网络调试助手 wireshark 练习 【1】Modbus协议 起…

浔川 AI 翻译 v5.0 上线时间相关公告

浔川 AI 翻译 v5.0 上线时间相关公告 尊敬的用户&#xff1a; 我们非常高兴地向大家宣布&#xff0c;浔川 AI 翻译 v5.0 存在提前上线的可能性&#xff01; 目前预计的上线时间为 2024 年 11 月 16 日。 不过需要注意的是&#xff0c;由于开发和测试过程中可能会遇到各种不可预…

零基础Java第十五期:抽象类接口(一)

目录 一、抽象类 1.1. 抽象的概念 1.2. 抽象类语法 1.3. 抽象类的特性 1.4. 图形类例子 二、 接口 2.1. 接口的概念 2.2. 语法规则 2.3. 接口的特性 2.4. 接口的使用 2.5. 实现多个接口 2.6. 工作当中常用的接口 一、抽象类 1.1. 抽象的概念 如果 一个类中没…