java多个文件压缩打包成zip下载

如果实现批量操作一些文件,使之压缩打包成zip下载?
具体实现步骤如下:

  1. 设置下载文件名编码
  2. 创建zip输出流ZipOutputStream
  3. 将需要下载的文件流循环写入ZipOutputStream
  4. 关闭各个流

话不多说,直接上代码
service层方法(关键):

@Overridepublic void downloadAllFile(HttpServletResponse response, String processInstanceId) {String downloadName = "xxx附件.zip";try {response.setContentType("multipart/form-data");response.setHeader("Content-Disposition", "attachment;fileName=" + URLEncoder.encode(downloadName, "UTF-8"));} catch (UnsupportedEncodingException e) {throw new HrmsException("下载文件名编码时出现错误.", e);}OutputStream outputStream = null;ZipOutputStream zos = null;try {outputStream = response.getOutputStream();zos = new ZipOutputStream(outputStream);// 将文件流写入zip中downloadTolocal(zos,processInstanceId);} catch (IOException e) {logger.error("downloadAllFile-xxx下载全部附件失败,processInstanceId=[{}],错误信息=[{}]",processInstanceId,e);}finally {if(zos != null) {try {zos.close();} catch (Exception e2) {logger.info("关闭输入流时出现错误",e2);}}if(outputStream != null) {try {outputStream.close();} catch (Exception e2) {logger.info("关闭输入流时出现错误",e2);}}}}private void downloadTolocal(ZipOutputStream zos,String processInstanceId) throws IOException {Map<String, String> pm = new HashMap<String, String>();pm.put("processInstanceId", processInstanceId);//获取文件信息(此处为业务代码,可根据自己的需要替换)List<Map<String,String>> fileInfoList = this.findByStatement("getAllFileInfo",pm);for (Map<String, String> map : fileInfoList) {String fileId = map.get("fileId");//文件名称(带后缀)String fileName = map.get("fileName");InputStream is = null;BufferedInputStream in = null;byte[] buffer = new byte[1024];int len;//创建zip实体(一个文件对应一个ZipEntry)ZipEntry entry = new ZipEntry(fileName);try {//获取需要下载的文件流is = ossFileManager.getFile(fileId);in = new BufferedInputStream(is);zos.putNextEntry(entry);//文件流循环写入ZipOutputStreamwhile ((len = in.read(buffer)) != -1 ) {zos.write(buffer, 0, len);}} catch (Exception e) {logger.info("xxx--下载全部附件--压缩文件出错",e);}finally {if(entry != null) {try {zos.closeEntry();} catch (Exception e2) {logger.info("xxx下载全部附件--zip实体关闭失败",e2);}}if(in != null) {try {in.close();} catch (Exception e2) {logger.info("xxx下载全部附件--文件输入流关闭失败",e2);}}if(is != null) {try {is.close();}catch (Exception e) {logger.info("xxx下载全部附件--输入缓冲流关闭失败",e);}}}} }

controller层接口:

 /*** 下载全部附件*/@RequestMapping(value = "/downloadAllFile/{processInstanceId}", method = RequestMethod.GET)public void  downloadAllFile(HttpServletResponse response,@PathVariable("processInstanceId") String processInstanceId) {floCnbCompetitionLimitService.downloadAllFile(response,processInstanceId);}

前端调用接口,便可在浏览器中直接下载zip文档下来

java多个文件压缩打包成zip下载相关推荐

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

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

  2. php将文件夹打包zip文件,php将文件夹打包成zip文件

    php将文件夹打包成zip文件:function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. while ...

  3. php 文件夹打包_php将文件夹打包成zip文件

    php将文件夹打包成zip文件:function addFileToZip($path,$zip){ $handler=opendir($path); //打开当前文件夹由$path指定. while ...

  4. vue项目批量加载url文件并打包到zip下载

    vue项目批量加载url文件并打包到zip下载 项目里之前是遇到这样一个需求哈,需要根据选择的不同动态批量生成并下载图片, 而且这个图片不是一张一张生成下载,而是要等他选好条件之后, 把对应的图片动态 ...

  5. java实现word下载及打包成zip下载(单个文件、多个文件)

    最近,本人需求将实现word下载以及打包成zip进行下载(单个文件.多个文件)将最近自己学习到的知识点分享给大家 1.实现word模板(三个步骤,最终需要的是upload.ftl) 大家可以参考这篇文 ...

  6. springboot中使用freemarker生成word文档并打包成zip下载(简历)

    一.设计出的简历模板图以及给的简历小图标切图         二.按照简历模板图新建简历word文件 :${字段名},同时将图片插入到word中,并将建好的word文件另存为xml文件:    三.直 ...

  7. java指定若干个网络图片,打包为zip下载

    应项目要求需要将多个存在某url地址的图片,打包为zip下载下来 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 2 ...

  8. java 文件夹打包成zip(带有嵌套的那种文件夹)

    文件夹中还嵌套有其他的文件夹或者文件 要进行压缩成zip 代码参考如下: public void zipFile() throws IOException {String sourceFile = & ...

  9. easyExcel导出excel文件并打包成zip压缩包下载

    文件导出 专栏收录该内容 2 篇文章0 订阅 订阅专栏 package com.business.testExcelPort; import java.io.BufferedInputStream; ...

  10. 批量下载文件,打包成zip压缩包

    批量下载文件,用程序打成zip压缩包在下载 前台传来要下载的url数组 @RequestMapping(value = "/download",method = RequestMe ...

最新文章

  1. 使用Caffe进行手写数字识别执行流程解析
  2. 用 Java 对 hbase 进行CRUD增删改查操作
  3. wxWidgets:创建应用程序的 DLL
  4. 运算放大器单电源应用中的使用齐纳二极管偏置方法
  5. 发票管理软件_财务人员都在用的这款发票管理软件,真的值得购买么?
  6. IDEA实时编译配置流程
  7. 从零开始 - iOSRTMP推流篇(1)
  8. springmvc与Servlet3.0不依赖common包实现文件上传
  9. Git提交错了不用慌,这三招帮你修改记录
  10. kmeans算法c语言代码,ML算法与代码实现——Kmeans(案例)
  11. CCS6.2.0 安装步骤详解
  12. 安利超实用的(cc协议)游戏3d模型素材网站
  13. 服务器系统照片备份,利用云服务器备份照片
  14. Linux命令详解-hwclock
  15. 磁盘管理控制台不是最新状态 win 7
  16. 动态联动select下拉框实现
  17. 如何查看自己电脑上是否成功安装了Mysql,以及如何查看mysql的安装目录
  18. H3C模拟器---HCL使用心得
  19. 解决maven项目-Dmaven.multiModuleProjectDirectory报错
  20. 2021年4月总结5月计划

热门文章

  1. 基于五种机器算法的信用风险评估
  2. 抖音主页头图怎么设置,掌握以下5点技巧即可丨国仁网络资讯
  3. 代运营服务和传统的数字化服务有什么区别呢?
  4. python字符串去掉最后的逗号_拼接字符串时去掉最后一个多余逗号
  5. 微型计算机的 CPU主要由两部分构成,微机是由哪两部分组成
  6. 拼多多回应漏洞:比薅羊毛更快的是“资损200亿”谣言的传播速度
  7. 《Domain-shift Conditioning using Adaptable Filtering …… for Robust Chinese Spell Check》阅读记录
  8. 中国睡眠经济行业发展格局与投资策略规划建议报告2022-2027年
  9. 心酸的两天(1):Nacos 启动后输入默认密码后:“用户名或密码错误”
  10. 局域网联机_局域网联机