1 默认项目已经配置并连接成功OSS客户端

@Resource
private OSSClient ossClient;

2 具体实现代码

public void batchDownLoadFile(DownLoadFileDTO downLoadFileDTO, HttpServletRequest request, HttpServletResponse response) {//获取前端传过来的文件id集合List<String> fileMapperIdList = downLoadFileDTO.getFileMapperIdList();try {String fileName = "test.zip";// 创建临时文件File zipFile = File.createTempFile("test", ".zip");FileOutputStream f = new FileOutputStream(zipFile);//作用是为任何OutputStream产生校验//第一个参数是制定产生校验和的输出流,第二个参数是指定Checksum的类型 (Adler32(较快)和CRC32两种)CheckedOutputStream csum = new CheckedOutputStream(f, new Adler32());//用于将数据压缩成Zip文件格式ZipOutputStream zos = new ZipOutputStream(csum);for (String fileMapperId : fileMapperIdList) {//数据库中获取自己的文件记录FileOrigin fileOrigin = fileOriginMapper.getFileOriginByFileMapperId(fileMapperId);OSSObject ossObject = ossClient.getObject(bucketName, fileOrigin.getFileOriginPath());InputStream inputStream = ossObject.getObjectContent();//数据库中获取自己文件的详情信息FileMapperVO fileMapperVO = fileMapperService.queryFileMapperDetail(fileMapperId);//zip设置文件名zos.putNextEntry(new ZipEntry(fileMapperVO.getFileMapperName() + "." + fileMapperVO.getFileMapperExetension()));int bytesRead = 0;// 向压缩文件中输出数据while ((bytesRead = inputStream.read()) != -1) {zos.write(bytesRead);}inputStream.close();// 当前文件写完,定位为写入下一条项目zos.closeEntry();}zos.close();String header = request.getHeader("User-Agent").toUpperCase();if (header.contains("MSIE") || header.contains("TRIDENT") || header.contains("EDGE")) {fileName = URLEncoder.encode(fileName, "utf-8");//IE下载文件名空格变+号问题fileName = fileName.replace("+", "%20");} else {fileName = new String(fileName.getBytes(), "ISO8859-1");}response.reset();response.setContentType("text/plain");response.setContentType("application/octet-stream; charset=utf-8");response.setHeader("Location", fileName);response.setHeader("Cache-Control", "max-age=0");response.setHeader("Content-Disposition", "attachment; filename=" + fileName);FileInputStream fis = new FileInputStream(zipFile);BufferedInputStream buff = new BufferedInputStream(fis);BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());byte[] car = new byte[1024];int l = 0;while (l < zipFile.length()) {int j = buff.read(car, 0, 1024);l += j;out.write(car, 0, j);}// 关闭流fis.close();buff.close();out.close();// 删除临时文件zipFile.delete();} catch (IOException e) {e.printStackTrace();}}

3 Postman测试

可以使用postman进行测试,使用Send and Download发送请求,即可得到我们上面定义的test.zip包

springboot+oss文件批量打包下载相关推荐

  1. 阿里云OSS文件批量打包下载

    阿里云OSS文件批量打包下载 public void downloadReport(List<String> fileNames,HttpServletResponse response) ...

  2. JAVA实现文件批量打包下载

    JAVA实现文件批量打包下载 实现 1.打包工具类的实现 /*** @author zhouxuan* @since 2019/4/19*/ public class ZipUtils {/*** @ ...

  3. java文件下载功能代码(单文件下载、多文件批量打包下载)——普遍适用

    一.前言   程序员在做web等项目的时候,往往都需要添加文件上传.下载.删除的功能,有时是单文件,有时多文件批量 操作,而这些功能的代码程序员可以自己收藏起来当成工具使用,这样,程序员在进行程序设计 ...

  4. ASP.NET多文件批量打包下载

    在项目实施中,遇到了将多个文件一起打包后,提供给用户下载.如:在一个ASP.NET的开发项目中,通过一个GridView选中对应行数据的CheckBox,就可以实现对选中文件的打包下载了. 在对多文件 ...

  5. PHP使用ZipArchive对文件进行批量打包下载

    PHP使用ZipArchive对文件进行批量打包下载 话不多说直接上图 DEMO 代码示例 <?php$file = $_GET['file'];//文件判断,无文件阻止if(!$file){e ...

  6. vue中实现文件批量打包压缩下载(以及下载跨域问题分析)

    上次做了一个选择多个数据生成多个二维码并下载,当时项目催的紧,就简单写了个循环生成二维码下载,一次性会下载很多文件,特别难整理: 刚好这次项目又遇到类似这种功能,需要一次性批量下载多个文件,那么就安排 ...

  7. C# 用zip,批量压缩文件,并打包下载

    C# 用zip,批量压缩文件,并打包下载,无需产生临时文件,二种都可以 using ICSharpCode.SharpZipLib.Checksums; using ICSharpCode.Sharp ...

  8. zip格式压缩文件并打包下载

    压缩文件并下载 zip格式压缩文件并打包下载 zip格式压缩文件并打包下载 Map<String, String> param = new HashMap<String, Strin ...

  9. JavaWeb通过http下载多个文件,打包下载,压缩下载

    JavaWeb通过http下载多个文件,打包下载,压缩下载 DownloadController.java 代码如下 package gov.zhbs.web;import gov.zhbs.util ...

最新文章

  1. 携程Apollo(阿波罗)配置中心本地开发模式不接入配置中心进行本地开发
  2. 光滑粒子流体动力学_基于SPH(光滑粒子流体动力学)算法的流体仿真
  3. Python基础高级用法,必须要掌握的知识点
  4. python 杂记(二)
  5. 无法解析的外部符号 __imp____glutInitWithExit@12
  6. 页面上传图片只能通过表单完成,且页面端向服务器端发送消息除了ajax外基本通过表单;通过JavaScript ajax代码只能post到服务器json与xml;...
  7. mysql手动同步_MySql数据库主从手动同步
  8. Java Web 项目SSO实战
  9. 微信支付v3 php 源码,求微信支付wxpayv3服务端完整代码
  10. VB.NET 基础入门
  11. 如何修复win7蓝牙服务器,快速解决win7系统蓝牙驱动的修复方法
  12. 坚果nuts 加速 官网_坚果 R2 发布:骁龙 865、1 亿像素、双曲面屏,售价 4499 元...
  13. 辽宁计算机专业大学排名及分数线,辽宁一本大学排名及分数线2021
  14. CentOS的下载与安装图文教程 (2020)
  15. ios android md5加密,iOS中使用MD5加密
  16. iphone型号表_苹果所有产品型号大全
  17. 神经网络与卷积神经网络,什么是卷积神经网络
  18. 卡尔·古斯塔夫· 荣格
  19. 股票技术图形怎么看?一文给你分析透!
  20. 谷歌浏览器设置打开新标签页为指定网页设置

热门文章

  1. 潮涌智造,后发的U9cloud能否挑战金蝶云星空霸主地位?
  2. 晚稻季湛江廉江 国稻种芯·中国水稻节:广东绿色田野农人忙
  3. ArcGIS入库操作
  4. Gephi使用详解 实现图可视化(janusgraph)
  5. linux lp0设备,P1108打印机插入Linux设备USB口后自动reset
  6. 银行核心系统:“交易(Transaction)”是什么?
  7. Android Stuido环境搭建
  8. C#调用FastReport模板进行打印
  9. IT行业,“三年工作经验”意味着什么?
  10. CSAPP笔记 第一章第二章