当业务需要处理多个文件时,通过压缩包的形式可以提供更好的体验,例如需要一次下载多个文件或者类似发送附件到邮箱的功能。

我的情况是数据库字段存储的是文件地址,是一个数据的json字符串,这时需要以压缩包的形式将存储的文件封装返回。

这里获取到存储的json字符串,直接转成自定义实体类List,然后进行遍历,根据存储路径获取到文件资源,将文件放入ZipOutputStream流中,处理完后直接将流下载或者作为发送邮件的参数资源即可。

        //获取实体类 拿到图片路径            Material material = materialServiceImp.getById(materialId);if(ObjectUtil.isNotEmpty(material)){//获取用户信息(邮箱)UserInfoDTO userInfo = userClientService.getUserInfo(courseOrderRpcDTO.getUserId());List<MaterialFile> materialFiles = null;String materialFilePath = material.getFilePath();try {materialFiles = JsonUtils.jsonToArray(new JSONArray(materialFilePath), MaterialFile.class);} catch (JSONException e) {e.printStackTrace();}if (ObjectUtils.isNotEmpty(materialFilePath)&&CollectionUtils.isNotEmpty(materialFiles)){ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();ZipOutputStream zos = new ZipOutputStream(byteArrayOutputStream);try {for (MaterialFile materialFile : materialFiles) {InputStream inputStream = fileUploadService.getInputStream(materialFile.getVisitFilePath());try {String zipName = "material" + File.separator + materialFile.getFileName();// zos.putNextEntry  开始添加压缩文件  ZipEntry传入的参数 zipName如果包含了层级关系就会生成文件夹zos.putNextEntry(new ZipEntry(zipName));int len;byte[] bytes = new byte[1024];while ((len = inputStream.read(bytes)) != -1) {zos.write(bytes, 0, len);}zos.closeEntry();inputStream.close();} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}zos.close();byteArrayOutputStream.close();} catch (UnsupportedEncodingException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}

注意:在处理完后关闭资源时,关闭顺序必须正确,不然得到的文件会损坏,后缀名不对....造成文件不能打开或下载。

结果图:

java将多个文件转成压缩包下载相关推荐

  1. Java实现从Excel文件转换成XML文件(一)

    实现思路:         直接从Excel文件装换成XML文件是可以实现的,这里我采用一个中间装换,也就是先实现excel文件内容放入实现设计好的access数据库文件中,然后再从access中读取 ...

  2. Java将多个文件打包成ZIP并下载

    Java将多个文件打包成ZIP并下载 需求是多个文件需要同时打包成zip压缩文件并下载到本地,首先我需要的是知道下载文件的路径.我有一个专门的sys_file_info表,表中有对应的文件路径.业务表 ...

  3. Spring Boot 实现将多个MinIO文件压缩成压缩包并下载至本地

    1 Maven依赖 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all< ...

  4. Java导出多个excel压缩成zip下载

    Java导出多个excel压缩成zip下载 maven <!--hutoos工具类根据需要可以导入不同的模块,我这里是导入全部的模块--><dependency><gro ...

  5. think.class.php下载,PHP_ThinkPHP实现将本地文件打包成zip下载,首先,将FileToZip.class文件放到T - phpStudy...

    ThinkPHP实现将本地文件打包成zip下载 首先,将FileToZip.class文件放到ThinkPHP/Extend/Library/ORG/Util/文件夹中,FileToZip.class ...

  6. 通俗易懂【Springboot】 单文件下载和批量下载(多个文件合成一个压缩包下载)

    文章目录 一.单文件下载 1.简单理解文件下载 2.单文件下载的具体代码实现 3.测试 4.单文件下载整体代码 二.多文件批量下载(多个文件合成一个压缩包下载) 1.多文件下载的实现方式,这里使用了Z ...

  7. JAVA 实现返回PDF文件流并进行下载

    JAVA 实现返回PDF文件流并进行下载 首先确保本地存放pdf 保证通过路径可以拿到文件 我这边把pdf放在e盘下的目录 1.前台方法 原生ajax 发送请求返回文件流进行下载 function d ...

  8. JAVA 如何将class文件转换成java文件

    说明 若将应用部署到了服务器上或者将JAVA文件编译成了class文件之后,而原JAVA代码又因为某些原因丢失了,那么能否将Class文件转换为JAVA文件? 工具 JAVA反编译工具 jad.exe ...

  9. java编程将HTML文件转换成PDF文件

    网上有好几种方法可以将将HTML文件转换成PDF文件但是有些对HTML文件格式要求比较严格,稍微错了一些就不能生成我们所要的PDF文件,这里我推荐一个 PD4ML,它可以解决HTML文件格式不正确的问 ...

最新文章

  1. 循序渐进学Oracle之索引、权限、角色
  2. Activity (项目实战:选择宝宝装备-UsersRegister)【Intent打开Activity、数据传递-回传、更新进度条】
  3. Qt工作笔记-使用QRegExp实现QString的split【读取文件时候,过滤各种字符】
  4. 十个网志流量统计工具一览
  5. MySql 随机读取多行数据并显示
  6. idea2020代码el组件红色波浪线_Android实现炫酷的ViewPager3D组件
  7. 一年级大括号问题专项训练_新人教版一年级数学上册5.9解决问题(减法)微课视频辅导|课后练习...
  8. elasticsearch的javaAPI之query
  9. vscode好用的扩展及常用的快捷键
  10. SQLMAP安装及详解
  11. 用VBS脚本实现软件定条件开启
  12. Mysql 免安装版本
  13. 【GitHub】利用Github建立你的个人网站
  14. OSM学习之路(一):OSM介绍
  15. 设计模式 访问者模式
  16. 微信小程序下载文件至本地,并打开文档
  17. CSS样式自动换行(强制换行)
  18. ubuntu:“NMI watchdog: BUG: soft lockup-CPU#0 stuck for 22s“
  19. Hadoop精华问答 | 基于Hadoop的数据中心有什么好处?
  20. 踩坑Gateway服务搭建、配置网关路由、路径重写和解决跨域问题(java类实现跨域)

热门文章

  1. Java语言概述以及环境搭建
  2. [!] CocoaPods was not able to update the `xxx` repo. If this is an unexpected issue and persists
  3. RationalDMIS 7.1 DMIS基本语句
  4. 微信小程序流量主广告怎么加圆角
  5. 威斯康星麦迪逊计算机专业排名,威斯康星大学麦迪逊分校计算机排名2020年
  6. 安卓设备TF卡概率性无法识别问题
  7. 维特比算法(Viterbi algorithm) 的理解
  8. 使用python代码爬取壁纸
  9. Mongodb被黑经历
  10. 关于一些数据集的下载链接