导语
  在测试功能中,出现了再Spring Boot中打包压缩文件的需求,下面来实现一个这个操作

    /*** 批量下载文件** @param request* @param response*/@GetMapping("/qcodeExcept")public void qcodeExcept(HttpServletRequest request, HttpServletResponse response) {//响应头的设置response.reset();response.setCharacterEncoding("utf-8");response.setContentType("multipart/form-data");//设置压缩包的名字String dates = "测试";String billname = "附件包-" + dates;String downloadName = billname + ".zip";//返回客户端浏览器的版本号、类型String agent = request.getHeader("USER-AGENT");try {//针对IE或者以IE为内核的浏览器:if (agent.contains("MSIE") || agent.contains("Trident")) {downloadName = java.net.URLEncoder.encode(downloadName, "UTF-8");} else {//非IE浏览器的处理:downloadName = new String(downloadName.getBytes("UTF-8"), "ISO-8859-1");}} catch (Exception e) {e.printStackTrace();}response.setHeader("Content-Disposition", "attachment;fileName=\"" + downloadName + "\"");//设置压缩流:直接写入response,实现边压缩边下载ZipOutputStream zipos = null;try {zipos = new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));zipos.setMethod(ZipOutputStream.DEFLATED); //设置压缩方法} catch (Exception e) {e.printStackTrace();}//循环将文件写入压缩流DataOutputStream os = null;//查询数据库获取文件信息JcHouseBaseInfo jcHouseBaseInfo = getJcHouseBaseInfo();List<JcHouseBaseInfo> list = jcHouseBaseInfoService.selectJcHouseBaseInfoList(jcHouseBaseInfo);//遍历文件信息(主要获取文件名/文件路径等)for (JcHouseBaseInfo authAttachmentDetail : list) {//文件路径String filePath = RuoYiConfig.getQrcodeUrl() + File.separator + authAttachmentDetail.getQcodePath();System.out.println("filePath===" + filePath);File file = new File(filePath);if (!file.exists()) {throw new BusinessException("文件已不存在");} else {try {//添加ZipEntry,并ZipEntry中写入文件流String fileName = authAttachmentDetail.getTeam() + "-" + authAttachmentDetail.getQcodePath();//.substring(0,authAttachmentDetail.getFileName().indexOf("."));zipos.putNextEntry(new ZipEntry(fileName));os = new DataOutputStream(zipos);InputStream is = new FileInputStream(file);byte[] b = new byte[100];int length = 0;while ((length = is.read(b)) != -1) {os.write(b, 0, length);}is.close();zipos.closeEntry();} catch (IOException e) {e.printStackTrace();}}}//关闭流try {os.flush();os.close();zipos.close();} catch (IOException e) {e.printStackTrace();}}

Spring Boot整合批量文件下载功能相关推荐

  1. 【SpringBoot学习】28、Spring Boot 整合 TKMybatis 通用 Mapper

    文章目录 Spring Boot 整合 TKMybatis 自定义父类接口 新增接口 新增之后回显 Id 更新 删除 单查询 查询列表 计数 条件构造器 技术分享区 Spring Boot 整合 TK ...

  2. 大聪明教你学Java | Spring Boot 整合 Redis 实现访问量统计

    前言 之前开发系统的时候客户提到了一个需求:需要统计某些页面的访问量,记得当时还纠结了一阵子,不知道怎么去实现这个功能,后来还是在大佬的带领下借助 Redis 实现了这个功能.今天又回想起了这件事,正 ...

  3. spring boot 整合 阿里云oss上传

    Spring Boot 整合 阿里云OSS上传 OSS申请和配置 1. 注册登录 2.开通以及配置 springboot整合使用 1. 进入我们springboot的项目中,导入oss相关依赖 2. ...

  4. Spring Boot整合elasticsearch实现全文检索

    文章目录 1.引入 1.1 Luence 1.2 Solr 1.3 ElasticSearch 2. ElasticSearch安装 2.1 云服务器安装 2.1.1. docker安装 2.1.2 ...

  5. spring boot整合spring security笔记

    最近自己做了一个小项目,正在进行springboot和spring Security的整合,有一丢丢的感悟,在这里分享一下: 首先,spring boot整合spring security最好是使用T ...

  6. 五、spring boot整合mybatis-plus

    spring boot整合mybatis-plus 简介 mybatis 增强工具包,简化 CRUD 操作. 文档 http://mp.baomidou.com http://mybatis.plus ...

  7. spring boot 整合mybatis 无法输出sql的问题

    使用spring boot整合mybatis,测试功能的时候,遇到到了sql问题,想要从日志上看哪里错了,但是怎么都无法输出执行的sql,我使用的是log4j2,百度了一下,很多博客都说,加上下面的日 ...

  8. springboot整合hibernate_峰哥说技术系列-17 .Spring Boot 整合 Spring Data JPA

    今日份主题 Spring Boot 整合 Spring Data JPA JPA(Java Persistence API)是用于对象持久化的 API,是Java EE 5.0 平台标准的 ORM 规 ...

  9. java 模板引擎_极简 Spring Boot 整合 Thymeleaf 页面模板

    点击"牧码小子"关注,和众多大牛一起成长! 关注后,后台回复 java ,领取松哥为你精心准备的技术干货! 虽然现在慢慢在流行前后端分离开发,但是据松哥所了解到的,还是有一些公司在 ...

最新文章

  1. ELK不香了?企业级日志平台后起之秀 Graylog
  2. 开源工程师:Ubuntu 应该抛弃 32 位 ISO 镜像
  3. SpringSecurity案例之认证服务security配置
  4. python父进程调用子进程_Python2.7下,调用subprocess启动子进程,读取子进程标准输出若干问题...
  5. 763 Hex Conversion
  6. 在MSF中怎么区分易混淆的工作项类型:Bug、风险和问题(我个人的理解)
  7. mysql 5.7 not null_mysql5.7基础 select...where...is not null 查找不为NULL的内容
  8. Kafka单节点多broker的部署和使用
  9. Linux下抓包工具tcpdump以及分析包的工具wireshark
  10. 在WPF TreeView中使用复选框
  11. openresty nginx php,diy 你的nginx-OpenResty
  12. 05_DecisionTree_统计学习方法
  13. html/js/css资源
  14. 【《Real-Time Rendering 3rd》 提炼总结】(十) 第十一章 · 非真实感渲染(NPR)相关技术总结
  15. 807. 区间求和(acwing水题记)
  16. 互联网运营面试题_产品运营面试常见问题
  17. 全球首推语音定制产品,百度地图背后的语音技术到底有多强大?
  18. MySQL基础学习2
  19. 云计算的三国演义!华为云、阿里云、腾讯云B端市场策略全解读
  20. 微信小程序 wx.request 的封装

热门文章

  1. 服务器2016修改时间,服务器时间错误
  2. 瓦片经纬度及行列号转换_ArcGIS根据最大最小坐标换算瓦片行列号
  3. python没有上方工具栏_PyQt5快速上手基础篇8-菜单栏、工具栏和状态栏
  4. IDEA或Webstorm设置Terminal终端字体大小
  5. window mysql5.5错误
  6. MySQL里的日期技巧
  7. SQL Server 2012附加数据库报错
  8. 从零开始学MVC3——创建项目
  9. SpringBoot如何使用拦截器
  10. mybatis学习笔记--常见的错误