zip工具类:

  /*** 把文件打成压缩包并输出到客户端浏览器中*/public static void downloadZipFiles(HttpServletResponse response, List<String> srcFiles, String zipFileName) {try {response.reset(); // 重点突出response.setCharacterEncoding("UTF-8"); // 重点突出response.setContentType("application/x-msdownload"); // 不同类型的文件对应不同的MIME类型 // 重点突出// 对文件名进行编码处理中文问题zipFileName = new String(zipFileName.getBytes(), StandardCharsets.UTF_8);// inline在浏览器中直接显示,不提示用户下载// attachment弹出对话框,提示用户进行下载保存本地// 默认为inline方式response.setHeader("Content-Disposition", "attachment;filename=" + zipFileName);// --设置成这样可以不用保存在本地,再输出, 通过response流输出,直接输出到客户端浏览器中。ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());zipFile(srcFiles, zos);} catch (IOException e) {e.printStackTrace();}}/*** 压缩文件** @param filePaths 需要压缩的文件路径集合* @throws IOException*/private static void zipFile(List<String> filePaths, ZipOutputStream zos) {//设置读取数据缓存大小byte[] buffer = new byte[4096];try {//循环读取文件路径集合,获取每一个文件的路径for (String filePath : filePaths) {File inputFile = new File(filePath);//判断文件是否存在if (inputFile.exists()) {//判断是否属于文件,还是文件夹if (inputFile.isFile()) {//创建输入流读取文件BufferedInputStream bis = new BufferedInputStream(new FileInputStream(inputFile));//将文件写入zip内,即将文件进行打包zos.putNextEntry(new ZipEntry(inputFile.getName()));//写入文件的方法,同上int size = 0;//设置读取数据缓存大小while ((size = bis.read(buffer)) > 0) {zos.write(buffer, 0, size);}//关闭输入输出流zos.closeEntry();bis.close();} else {  //如果是文件夹,则使用穷举的方法获取文件,写入zipFile[] files = inputFile.listFiles();List<String> filePathsTem = new ArrayList<String>();for (File fileTem : files) {filePathsTem.add(fileTem.toString());}zipFile(filePathsTem, zos);}}}} catch (IOException e) {e.printStackTrace();} finally {if (null != zos) {try {zos.close();} catch (IOException e) {e.printStackTrace();}}}}

controller:

/*** @description: zip* @return: com.ddkj.common.utils.RetMessage* @author: Jay* @date: 2019-12-27 14:15*/@RequestMapping("/packageZip")public RetMessage packageZip(@RequestParam Map<String, Object> params, HttpServletResponse respons){EntityWrapper<PbFileEntity> wrapper = new EntityWrapper<>();if(params.get("repairTaskId") != null ){if(params.get("type") != null){wrapper.eq("type",params.get("type"));wrapper.eq("repair_task_id",params.get("repairTaskId"));List<PbFileEntity> pbFileEntities = pbFileService.selectList(wrapper);List<String> list = new ArrayList<>();if (pbFileEntities != null && pbFileEntities.size()>0) {for (PbFileEntity pbFileEntity : pbFileEntities) {list.add(pbFileEntity.getUrl());}}if(list != null && list.size()>0){FileUtils.downloadZipFiles(respons,list,"image.zip");return null;}}}return RetMessage.error();}

springboot 多文件压缩下载(流)相关推荐

  1. java实现下载压缩文件_java实现文件压缩下载----压缩下载zip

    文件压缩下载 Controller层: /** *文件压缩下载 *billname:文件名 *filename:文件存放路径 */ public void downloadsource(HttpSer ...

  2. 批量文件压缩下载(zip)

    ps:工作之余仅留备份用,未全面完善,请按需取用 一.主要关注两点:1.找到文件并压缩:2.通过文件输出流响应前端 @RestController @RequestMapping("/fil ...

  3. Java多文件压缩下载解决方案

    Java多文件压缩下载解决方案 需求: 会员运营平台经过改版后页面增加了许多全部下载链接,上周上线比较仓促,全部下载是一个直接下载ZIP压缩文件的链接,每个ZIP压缩文件都是由公司运营人员将页面需要下 ...

  4. php excel模板导出、openoffice excel转pdf、多文件压缩下载

    最近两周都在弄关于excel模板导出.excel转pdf.多文件压缩下载.弄得头都大了,接下来说说实现的方法吧. 我用的是laravel5.1的框架,读取模板生成excel,并且插入图片,直接上代码 ...

  5. java实现文件压缩下载----压缩下载zip

    文件压缩下载 Controller层: /** *文件压缩下载 *billname:文件名 *filename:文件存放路径 */ public void downloadsource(HttpSer ...

  6. java实现文件压缩下载

    文件压缩下载 package com.ruoyi.utils; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.uti ...

  7. Nodejs做后端,实现文件压缩下载的几种方案(archiver、compressing、linux的zip命令):

    一. Archiver 1. 安装 npm install archiver 2. 使用 由于需要做文件操作,所以我们需要将fs库也引进来 先创建一个可写流,用于传入压缩包数据 再创建一个archiv ...

  8. 调用cmd方法,用于网盘文件压缩下载

    cmd = cmd.Trim().TrimEnd('&') + "&exit";//说明:不管命令是否成功均执行exit命令,否则当调用ReadToEnd()方法时 ...

  9. SpringBoot实现多文件压缩下载.zip

    前言:服务器生成多个文本文件.需要打包一次返回下载.例如:xml,word,excel try {response.setHeader("Content-Disposition", ...

最新文章

  1. 修改innodb_flush_log_at_trx_commit参数提升insert性能
  2. 排序字段设计_内容搜索排序表达式的最佳实践
  3. 数组模拟加法(每日一练 11.30)
  4. iOS关键代码遭泄露;Google正式抛弃HTTP;微博网页版出故障 | 一周业界事
  5. win7 mac虚拟机linux,Mac虚拟机parallels desktop超详细安装Win7图文分解
  6. 基于SpringBoot/SSM的旅游论坛
  7. BigDecimal的精度舍入模式详解
  8. 变频器的工作原理与结构介绍
  9. js中函数的传递参数
  10. (成功解决)网页无法打开位于http://www.baidu.com/的网页无法加载,因为:net:ERR_NAME_NOT_RESOLVED
  11. 生日悖论分析python_Python数据分析养成记4——预测泰坦尼克号生存概率
  12. 需要验证的网络连接服务器,登录iCloud提示验证失败,连接到服务器时出现问题怎么办...
  13. Opencv源码之平面点集的最小包围圆
  14. Columns函数:返回数据表区域的总列数。
  15. http-parser用法
  16. Android targetSdkVersion从23升级到26适配指南
  17. 手机录屏并转换成gif动图
  18. nacos 单机部署_使用Docker部署Nacos-Server(单机版)
  19. YTU OJ 2914 Problem A xiaoping学构造函数
  20. 猫和路由器是完全两码事!!!!

热门文章

  1. 4pl参数拟合python程序
  2. error C3867: “XXX::XXX”: 非标准语法;请使用 ““ 来创建指向成员的指针。
  3. 解决无法使用gpt的问题
  4. 循环肿瘤细胞(CTCs)分选进样系统微小正负压精密控制的解决方案
  5. 智能车电磁环岛处理方法_UV漆与TPU智能手表套附着力差解决方法之TPU处理剂
  6. (附源码)计算机毕业设计SSM基于web的小说浏览系统
  7. 桌面只计算机图标发白,电脑桌面上的文件夹变成白色的图标如何解决
  8. 笔记本玩游戏设置全屏
  9. 5000元性价比高的笔记本_5000左右的笔记本哪款好 2018高性价比笔记本推荐
  10. netty Recycler(一)