当前位置: 首页 > news >正文

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

实战之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;}

欢迎点赞、转发、收藏。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • shapeit填充
  • 免费好用的 CI/CD 工具有哪些?
  • C++ //练习 16.6 你认为接受一个数组实参的标准库函数begin和end是如何工作的?定义你自己版本的begin和end。
  • CSP:内容安全策略的前端深入解析
  • SeaCMS海洋影视管理系统远程代码执行漏洞复现
  • 经典文献阅读之--GraphAD(端到端自动驾驶的交互场景图)
  • 【笔记:3D航路规划算法】二、RRT*
  • UnityShaderUI编辑器扩展
  • 手撕数据结构---栈和队列的概念以及实现
  • go语言怎么实现dataauth?
  • “八股文”在实际工作中是助力、阻力还是空谈?
  • c程序杂谈系列(职责链模式与if_else)
  • Spring中使用到的设计模式及其源码分析
  • [红明谷CTF 2021]write_shell 1
  • UE5+OpenCV配置(Windows11系统)
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 08.Android之View事件问题
  • Computed property XXX was assigned to but it has no setter
  • Debian下无root权限使用Python访问Oracle
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • JavaScript 是如何工作的:WebRTC 和对等网络的机制!
  • js 实现textarea输入字数提示
  • Markdown 语法简单说明
  • ng6--错误信息小结(持续更新)
  • 成为一名优秀的Developer的书单
  • 番外篇1:在Windows环境下安装JDK
  • 工作手记之html2canvas使用概述
  • 使用权重正则化较少模型过拟合
  • 微信公众号开发小记——5.python微信红包
  • 一起参Ember.js讨论、问答社区。
  • 翻译 | The Principles of OOD 面向对象设计原则
  • ​软考-高级-系统架构设计师教程(清华第2版)【第12章 信息系统架构设计理论与实践(P420~465)-思维导图】​
  • # 安徽锐锋科技IDMS系统简介
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • #考研#计算机文化知识1(局域网及网络互联)
  • #控制台大学课堂点名问题_课堂随机点名
  • (delphi11最新学习资料) Object Pascal 学习笔记---第14章泛型第2节(泛型类的类构造函数)
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (安全基本功)磁盘MBR,分区表,活动分区,引导扇区。。。详解与区别
  • (不用互三)AI绘画:科技赋能艺术的崭新时代
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (三) prometheus + grafana + alertmanager 配置Redis监控
  • (转)Linq学习笔记
  • (转)linux 命令大全
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • ***检测工具之RKHunter AIDE
  • .JPG图片,各种压缩率下的文件尺寸
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .Net 垃圾回收机制原理(二)
  • .netcore 如何获取系统中所有session_如何把百度推广中获取的线索(基木鱼,电话,百度商桥等)同步到企业微信或者企业CRM等企业营销系统中...
  • .net流程开发平台的一些难点(1)
  • /etc/fstab 只读无法修改的解决办法
  • @hook扩展分析
  • @LoadBalanced 和 @RefreshScope 同时使用,负载均衡失效分析
  • @ModelAttribute 注解