实战之oss附件批量下载---springboot 实现压缩阿里云oss附件并下载

news2024/9/9 0:32:16

实战之oss附件批量下载,借鉴网上一些案例,但是没有达到预期效果,结合项目需求。实现远程将oss上的文件进行压缩,并提供给前端用户下载,经过测试完美实现该功能。

@PostMapping("downLoadZip")
    public void downLoadZip(@RequestBody CourseDetailVo detailVo,
                            HttpServletResponse response,
                            @RequestParam(value = "customFileName", required = false, defaultValue = "default.zip") String customFileName) throws IOException {
        List<AttachZipDto> objectNames = detailVo.getZipDtoList();
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
        try (ZipOutputStream zipOut = new ZipOutputStream(byteArrayOutputStream)) {
            for (AttachZipDto objectName : objectNames) {
                String fileUrl = objectName.getFileOssUr();
                String extension = TouUtil.getFileExtension(objectName.getFileOssUr());
                if (fileUrl.startsWith("/")) {
                    fileUrl = fileUrl.substring(1);
                }
                try (InputStream inputStream = ossUtil.getFileInputStream(fileUrl)) {
                    zipOut.putNextEntry(new ZipEntry(objectName.getFileName()+"."+extension));
                    IOUtils.copy(inputStream, zipOut);
                    zipOut.closeEntry();
                } catch (OSSException | IOException e) {
                    // 处理从 OSS 获取文件时发生的异常
                    throw new RuntimeException("Failed to retrieve file from OSS", e);
                }
            }
            // 设置HTTP响应头
            response.setContentType("application/zip");
            response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(customFileName, StandardCharsets.UTF_8.toString()) + "\"");
            // 将压缩文件写入HTTP响应
            try (OutputStream outputStream = response.getOutputStream()) {
                byteArrayOutputStream.writeTo(outputStream);
            }
        } catch (IOException e) {
            // 处理 ZIP 创建或写入响应时的异常
            throw e;
        }

欢迎点赞、转发、收藏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1958481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Matlab编程资源库(16)数值微分

一、数值差分与差商 在Matlab中&#xff0c;数值差分与差商是数值分析中常用的概念&#xff0c;尤其在求解微分方程、插值、逼近等领域有广泛应用。下面简要介绍这两个概念及其在Matlab中的实现。 数值差分 数值差分是微分运算的离散化形式&#xff0c;用于近似求解导数。给定…

宠物浮毛空气净化器真的有用吗?性价比高的浮毛空气净化器推荐

作为一位5年资深铲屎官&#xff0c;随着养猫的家庭数量不断增加&#xff0c;轻松撸猫虽然很快乐。然而&#xff0c;宠物的存在也可能引发一些问题&#xff0c;比如宠物的体味和脱落的毛发&#xff0c;这些都可能成为影响家庭健康的隐患。特别是宠物排泄物的气味&#xff0c;如果…

C++11中的右值引用以及移动构造等

目录 一、右值引用 1.左值引用和右值引用 2.左值引用与右值引用比较 3.右值引用使用场景和意义 1️⃣ 传返回值 2️⃣ STL中的应用 4.完美转发 模板中的&& 万能引用&#xff08;引用折叠&#xff09; 二、 新的类功能 1.默认成员函数 2.类成员变量初始化 3.…

【找到字符串中所有字母异位词】python刷题记录

R2-滑动窗口篇 滑动窗口哈希表 和之前那道一样 http://t.csdnimg.cn/dpIbt class Solution:def findAnagrams(self, s: str, p: str) -> List[int]:#返回字典记录了每个字符出现的次数counter1collections.Counter(p)#滑动窗口记录counter2即可ret[]num2len(s)num1len(p…

VIM基础配置

1. CTAGS配置 下载 上传虚拟机&#xff0c;解压&#xff0c;进入目录 tar -xzvf ctags-5.8.tar.gz cd ctags-5.8/编译 ./configure sudo make sudo make install查看是否安装成功 ctags --version打印如下 2. 使用Vundle 下载 git clone https://github.com/VundleVim/Vund…

如何将WordPress文章中的外链图片批量导入到本地

在使用采集软件进行内容创作时&#xff0c;很多文章中的图片都是远程链接&#xff0c;这不仅会导致前端加载速度慢&#xff0c;还会在微信小程序和抖音小程序中添加各种域名&#xff0c;造成管理上的麻烦。特别是遇到没有备案的外链&#xff0c;更是让人头疼。因此&#xff0c;…

2024下《系统架构设计师》案例简答题,刷这些就够了!

2024年软考下半年已经越来越近了&#xff0c;不知道今年备考架构的同学们准备得怎么样了呢&#xff1f; 简答题一直是架构拿分的重点区域&#xff0c;对于许多考生来说&#xff0c;也往往是最具挑战性的部分。今天我就把那些重要的案例简答题类型整理汇总给大家&#xff0c;希望…

C++选择题带答案

1&#xff0e;下列关于定义一个指向double型变量的指针&#xff0c;正确的是&#xff08; B &#xff09;。 A&#xff0e;int a(5)&#xff1b;double *pda&#xff1b; B&#xff0e;double d(2.5)&#xff0c;*pd&d&#xff1b; C&#xff0e;dou…

uniapp时间戳转时间

时间戳转时间 utils页面 function timestampToTime(time) { const date new Date(time); const year date.getFullYear(); const month String(date.getMonth() 1).padStart(2, 0); // 月份从0开始&#xff0c;所以要加1&#xff0c;并补齐0 const day String(date…

系统架构师考点--系统架构设计(下)

大家好。今天总结一下系统架构设计的最后一部分知识点。 一、软件系统的质量属性 软件系统的质量属性 软件系统的质量属性可分为开发期质量属性和运行期质量属性2个部分。 1、开发期质量属性主要指在软件开发阶段所关注的质量属性&#xff0c;主要包含6个方面&#xff1a; …

联想电脑怎么重装系统_联想电脑U盘重装win10详细图文教程

联想电脑怎么重装系统&#xff1f;在当今科技发展迅猛的时代&#xff0c;联想电脑已经成为了人们生活中不可或缺的一部分。然而&#xff0c;随着时间的推移&#xff0c;我们可能会遇到一些问题&#xff0c;例如系统崩溃或者需要更换操作系统。这时&#xff0c;使用U盘来重新安装…

57页PPT智慧水利数字孪生综合解决方案

实现“全局一盘棋”的智慧水利综合管理&#xff0c;关键在于整合水利大数据、数字孪生与人工智能技术&#xff0c;通过“一图、一库、一平台”的构建&#xff0c;为水利工作提供全面、科学、智能的管理和决策支持。以下是对这一目标的详细解读和实现路径&#xff1a; 知识星球…

C/C++进阶 (8)哈希表(STL)

个人主页&#xff1a;仍有未知等待探索-CSDN博客 专题分栏&#xff1a;C 本文着重于模拟实现哈希表&#xff0c;并非是哈希表的使用。 实现的哈希表的底层用的是线性探测法&#xff0c;并非是哈希桶。 目录 一、标准库中的哈希表 1、unordered_map 2、unordered_set 二、模…

【计算机毕设论文】基于SpringBoot线上学习平台的设计与实现

&#x1f497;博主介绍&#xff1a;✌全平台粉丝5W,高级大厂开发程序员&#x1f603;&#xff0c;博客之星、掘金/知乎/华为云/阿里云等平台优质作者。 【源码获取】关注并且私信我 感兴趣的可以先收藏起来&#xff0c;同学门有不懂的毕设选题&#xff0c;项目以及论文编写等相…

「数组」实现动态数组的功能(C++)

概述 动态数组&#xff0c;顾名思议即可变长度的数组。数组这种数据结构的实现是在栈空间或堆空间申请一段连续的可操作区域。 实现可变长度的动态数组结构&#xff0c;应该有以下操作&#xff1a;申请一段足够长的空间&#xff0c;如果数据的存入导致空间已满&#xff0c;则…

CentOS7安装最新版vim;vim自动补齐配置

想练习一会vim&#xff0c;结果发现敲代码没有空号自动补齐和缩进很难受&#xff0c;所以想配置一下。 配置vim&#xff1a; 可以通过 vim ~/.vimrc 来给 vim 加启动的设定&#xff08;比如set nu&#xff0c;这样就会在每次启动的时候都加上行号。当然过程中可以在底行模式输…

基于SpringBoot+Vue的学生考勤管理系统(带1w+文档)

基于SpringBootVue的学生考勤管理系统(带1w文档) 系统为了数据库结构的灵活性选择MySQL来设计&#xff0c;而java技术&#xff0c;B/S架构则保证了较高的平台适应性。本文主要介绍了系统开发背景&#xff0c;需要完成的功能与开发过程&#xff0c;说明系统设计重点与设计思想。…

如何在linux系统中用conda安装R环境及R包

一、miniconda3的安装不再赘述 二、安装R环境 1. 提前准备好conda的R单独环境 conda env list #查看已有环境 查看R的最新版本&#xff1a;r-project ##创建环境和激活环境 conda create -n R4.4.1 conda activate R4.4.1 备注&#xff1a;激活环境Linux&#xff0c;OS X…

企业如何保证公司内网安全

1. 加强网络安全防护 部署防火墙和入侵检测系统&#xff1a;作为内网安全的第一道防线&#xff0c;防火墙和入侵检测系统能够有效阻止外部攻击和恶意软件的入侵。 数据加密&#xff1a;采用先进的加密技术保护敏感数据&#xff0c;确保数据在传输和存储过程中的安全性。 访问…

【Android面试八股文】荣耀面试算法题: 输出一个给定的字符串的最长回文子序列及其长度!

文章目录 一、真题链接二、如何解决2.1算法思路2.2 算法步骤2.3 Java算法实现 一、真题链接 还好我以前刷过这道题&#xff0c; 其实题目就是LeetCode的 516.最长回文子序列&#xff0c; 地址&#xff1a;https://leetcode.cn/problems/longest-palindromic-subsequence/des…