java将oss链接打包成压缩包并返回

博主介绍: 22届计科专业毕业,来自湖南,主要是在CSDN记录一些自己在Java开发过程中遇到的一些问题,欢迎大家一起讨论学习,也欢迎大家的批评指正。

文章目录

    • 前言
    • 解决
    • 注意
    • 结果展示

前言

需求:在用户列表中的一列中有个附件下载按钮,点击下载按钮需直接开始下载用户的附件压缩包。
在这里插入图片描述

用户的附件文件是以oss的url路径存储在数据库中的,多个文件以逗号分割例如:

https://xxxxx/user/head1.png,https://xxxxx/user/body1.png

解决

直接上代码

 public ResultData getFileZip(Integer id, HttpServletResponse response) throws IOException {ClassExpert classExpert = classExpertMapper.selectByPrimaryKey(id);String certificate = classExpert.getCertificate();// 1、查询所有照片文件url,封装成一个listString[] urls = certificate.split(",");// 2、设置压缩包名,与返回信息String zipFile = classExpert.getName() + ".zip";// 返给前端流// 设置响应的内容类型response.setContentType("application/zip");// 设置文件名,并进行URL编码String zipFileUtf8 = URLEncoder.encode(zipFile, "UTF-8");response.setHeader("Content-Disposition", "attachment; filename=\"" + zipFileUtf8 + "\"");ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());// 压缩包try {for (String fileUrl : urls) {// 3.1 获取ossObject对象String fileName = fileUrl.substring(fileUrl.lastIndexOf("/") + 1);String objectName = fileUrl.replaceAll("https://" + MarvsmartConfig.new_sts_bucketName + "." + MarvsmartConfig.new_oss_endpoint + "/", "");OSSClientUtil ossClientUtil = new OSSClientUtil();OSSObject ossObject = ossClientUtil.getObject(objectName);// 3.2 直接从OSSObject的输入流读取数据并添加到ZIP文件zos.putNextEntry(new ZipEntry(fileName));try (InputStream inputStream = ossObject.getObjectContent()) {byte[] buffer = new byte[1024];int len;while ((len = inputStream.read(buffer)) != -1) {zos.write(buffer, 0, len);}}zos.closeEntry();}} catch (Exception e) {e.printStackTrace();} finally {zos.close();}return ResultData.success();}

注意

例如文件oss路径为

https://bucketname.beijin-endpoint/user/head123.png

即我们只需要根据实际情况调整代码中的objectName值为:

user/head123.png

代码中的fileName值为:

head123.png

OSSClientUtil是我自己封装的工具类大家根据自己的实际情况,获取到ossObject 对象即可

结果展示

请求接口会直接弹出下载
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SpringTask实现的任务调度与XXL-job实现的分布式任务调度【XXL-Job工作原理】

目录 任务调度 分布式任务调度 分布式任务调度存在的问题以及解决方案 使用SpringTask实现单体服务的任务调度 XXL-job分布式任务调度系统工作原理 XXL-job系统组成 XXL-job工作原理 使用XXL-job实现分布式任务调度 配置调度中心XXL-job 登录调度中心创建执行器和任务 …

渗透测试实战思路分析

免责声明:文章来源真实渗透测试,已获得授权,且关键信息已经打码处理,请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人…

状态机高阶讲解-05

887 00:38:03,240 --> 00:38:04,330 在外面 888 00:38:05,130 --> 00:38:06,120 有 889 00:38:06,400 --> 00:38:08,475 请求进来的时候 890 00:38:08,475 --> 00:38:10,550 有消息进来的时候 891 00:38:11,630 --> 00:38:14,000 那么经过我们状态机 892 0…

白话transformer(三):Q K V矩阵代码演示

在前面文章讲解了QKV矩阵的原理,属于比较主观的解释,下面用简单的代码再过一遍加深下印象。 B站视频 白话transformer(三) 1、生成数据 我们呢就使用一个句子来做一个测试, text1 "我喜欢的水果是橙子和苹果&…

计算机网络——物理层(数据通信基础知识)

计算机网络——物理层(1) 物理层的基本概念数据通信的基本知识一些专业术语消息和数据信号码元 传输速率的两种表示方法带宽串行传输和并行传输同步传输和异步传输 信道基带信号调制常用编码方式 我们今天进入物理层的学习,如果还没有了解OSI…

爱普生晶振发布RTC模块晶振(压电侠)

爱普生晶振一直以”省,小,精”技术作为资深核心,并且已经建立了一个原始的垂直整合制造模型,可以自己创建独特的核心技术和设备,使用这些作为基地的规划和设计提供独特价值的产品. 世界领先的石英晶体技术精工爱普生公…

Python实现贝叶斯优化器(Bayes_opt)优化极限学习机回归模型(ELMRegressor算法)项目实战

说明:这是一个机器学习实战项目(附带数据代码文档视频讲解),如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 贝叶斯优化器 (BayesianOptimization) 是一种黑盒子优化器,用来寻找最优参数。 贝叶斯优化…

展厅装修主要流程是什么

1、展厅主题 沟通是展厅装修服务的前提,沟通营者对企业的基本情况了解,影响着展厅装修的服务质量,所以说在为参展商提供展厅装修服务时,都要与参展商进行详细的洽谈。 2、现场勘探 展厅装修的首要步骤就是需要先进入展会的场馆&am…

本地项目上传至远程git仓库

如何将本地项目上传至远程git仓库 在某些时候,本地写的小项目需要上传指定的git仓库。 在本地文件中选择要上传的项目文件目录,右键选择 Git Bash Here 初始化git git init关联远程库 git remote add origin https://github.com/xxxx/xxxx.git将文件添…

04- 基于SpringAMQP封装RabbitMQ,消息队列的Work模型和发布订阅模型

SpringAMQP 概述 使用RabbitMQ原生API在代码中设置连接MQ的参数比较繁琐,我们更希望把连接参数写在yml文件中来简化开发 SpringAMQP是基于AMQP协议定义的一套API规范,将RabbitMQ封装成一套模板用来发送和接收消息 AMQP(Advanced Message Queuing Portocol)是用于在应用程序…

2024.3.14jsp(2)

一、实验目的 掌握eclipse开发工具的使用&#xff1b;jsp标记、如指令标记&#xff0c;动作标记&#xff1b;变量和方法的声明&#xff1b;Java程序片&#xff1b; 实验&#xff1a;看电影 源代码watchMovie.jsp <% page language"java" contentType"text…

OSI(Open Systems Interconnection)模型和TCP/IP模型

OSI模型 OSI模型是一个概念模型&#xff0c;由国际标准化组织&#xff08;ISO&#xff09;在1984年提出&#xff0c;用于促进不同系统间的通信互联。OSI模型将网络通信的过程分为七层&#xff0c;每一层都有其特定的功能&#xff0c;从下至上依次是&#xff1a; 物理层&#x…