打包zip工具类

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;public class ZipUtils {/*** 批量打包** @param fileSaveRootPath 项目根目录* @return zip文件保存绝对路径*/public String createZipAndReturnPath(List<Map<String,Object>> list,String filename, String fileSaveRootPath) {try {//生成打包下载后的zip文件:文件名.zipString papersZipName = filename+".zip";//zip文件保存路径String zipPath = fileSaveRootPath + papersZipName;ZipOutputStream out = new ZipOutputStream(new FileOutputStream(zipPath));//遍历jsonArray列表获取所有JSONObject对象for (int i = 0; i < list.size(); i++) {Map<String,Object> map=list.get(i);//获得文件相对路径String relativePath = map.get("filepath").toString();//获得文件名String fileName = relativePath.substring(relativePath.lastIndexOf("/")+1);//获得下载文件完整路径String downloadPath = fileSaveRootPath + relativePath;//以论文标题为每个文件命名FileInputStream fis = new FileInputStream(downloadPath);out.putNextEntry(new ZipEntry(fileName));//写入压缩包int len;byte[] buffer = new byte[1024];while ((len = fis.read(buffer)) > 0) {out.write(buffer, 0, len);}out.closeEntry();fis.close();}out.close();out.flush();return zipPath;} catch (Exception e) {e.printStackTrace();}return null;}/*** 批量下载* @param request 请求* @param response 返回*/public void batchDownloadFiles(List<Map<String,Object>> list,String filename,HttpServletRequest request, HttpServletResponse response) {//获取web项目根目录String fileSaveRootPath = request.getSession().getServletContext().getRealPath("/");//创建zip文件并返回zip文件路径String zipPath = new ZipUtils().createZipAndReturnPath(list, filename,fileSaveRootPath);try {response.reset();response.setCharacterEncoding("UTF-8");response.setContentType("application/zip;charset=utf-8");response.setHeader("Content-Disposition", "attachment;filename="+filename+".zip");System.out.println(response.getHeader("Content-Disposition"));//开始下载BufferedInputStream is = new BufferedInputStream(new FileInputStream(new File(zipPath)));BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());byte[] buff = new byte[1024];int len = 0;while ((len = is.read(buff, 0, buff.length)) != -1) {out.write(buff, 0, len);}out.close();out.flush();is.close();} catch (Exception e) {e.printStackTrace();}}
}

controller层

//附件批量下载并打包
@RequestMapping(value = "fileBatchDownload", method = RequestMethod.GET)
public void fileBatchDownload(HttpServletRequest request,HttpServletResponse response){String id=request.getParameter("id");  //前端传的主表idString filename=request.getParameter("filename"); //压缩包名称List<Map<String,Object>> list=busAnnexMService.fileBatchDownload(id);    //查询id下的所有附件信息new ZipUtils().batchDownloadFiles(list,filename,request,response);  //调用工具类打包并下载
}

java实现附件打包并下载相关推荐

  1. java实现文件打包压缩下载接口(附上可实际运行的代码)

    最近在写项目接口,涉及到文件下载.打包压缩下载,单个文件下载还是比较简单的,多文件下载涉及到打包和压缩知识,之前也没做过,写篇博客做个简单的记录一下.闲言少叙,上代码: 如下代码是精简过后的测试代码, ...

  2. 小功能:java导出excel,并与附件打包zip,excel中每条记录用超链接关联附件目录

    代码仓库:ExcelAttach.java 配套视频:https://www.bilibili.com/video/BV1wT41197W8 需求 需求要做一个小小的员工信息收集系统,员工登录页面,填 ...

  3. java打包并下载压缩包报错问题

    页面下载多个文件创建临时压缩包调用浏览器自带弹窗下载 根据如上随笔记录,多个文件下载成压缩包,压缩包下载成功.但是解压时提示报错: 利用程序打包并下载的zip压缩包: 用"306压缩软件&q ...

  4. 分享26个关于Java开发视频教程(免费下载)

    分享26个关于Java开发视频教程(免费下载) 1.开发前传_CSS.avi 2.开发前传_HTML基础.avi 3.开发前传_javascript.avi 4.Web开发工具的安装与使用.avi 5 ...

  5. java程序打包为jar_将Java应用程序打包为一个(或胖)JAR

    java程序打包为jar 这篇文章将针对一个有趣但非常强大的概念:将您的应用程序打包为单个可运行的JAR文件,也称为一个或胖 JAR. 我们习惯了大型WAR归档文件,其中包含所有打包在某些常见文件夹结 ...

  6. 将Java应用程序打包为一个(或胖)JAR

    这篇文章的目标是一个有趣但非常强大的概念:将应用程序打包为单个可运行的JAR文件,也称为一个或胖 JAR文件. 我们习惯了大型WAR归档文件,其中包含所有打包在某些公用文件夹结构下的依赖项. 使用类似 ...

  7. Java web系统打包成exe安装文件

    Java web系统打包成exe安装文件 一.    工具准备 1.        NSIS打包工具: http://nsis.sourceforge.net下载并安装: 2.        NSIS ...

  8. plupload附件上传下载+百度富文本编辑器

    从github下载源码https://github.com/moxiecode/plupload/tree/master/js 从百度富文本官网下载源码https://ueditor.baidu.co ...

  9. 通过url地址批量打包zip下载文件

    通过url地址批量打包zip下载文件 controller @ApiOperation("通过下载url批量打包zip下载")@PostMapping("batchDow ...

最新文章

  1. mysql行格式化_MySQL数据格式化语句
  2. 【转】PHP date(Y-m-d H:i:s);获取当前时间 差8小时解决办法
  3. Activity栈管理(三):Intent的Flag与taskAffinity
  4. 初学者自学python要看什么书-初学者如何学习Python?掌握这17个实用小技巧快速入门!...
  5. C#指针使用学习总结
  6. Android系统主题总结和使用
  7. springboot接收文件上传_SpringBoot第十七篇:上传文件
  8. 计算机系统一级免费,计算机系统一级ms_office课件第一章.pptx
  9. mybatis 不等于_MyBatis 第一天
  10. AI 框架部署方案之模型转换
  11. 5-17 汉诺塔的非递归实现 (25分)
  12. 在 ML2 中配置 VXLAN - 每天5分钟玩转 OpenStack(110)
  13. 2021年危险化学品经营单位安全管理人员考试报名及危险化学品经营单位安全管理人员作业考试题库
  14. 移动联通基站定位查询
  15. 【高等数学】微积分----教你如何简单地推导求导公式(一)
  16. layer扩展打开/关闭动画
  17. 缺陷管理工具--Mantis
  18. 解决高版本MATLAB robotics toolbox在plot/teach时报错问题
  19. Android Design in Action — 以微信为例
  20. 现代密码学之数字签名

热门文章

  1. 编译原理:高级程序设计语言的语法描述
  2. c#开发的漂亮高仿QQ打包安装程序界面
  3. 网络诊断dns服务器未响应,网络诊断提示DNS服务器未响应解决方法
  4. 微信开挂怎么防止封号_微信大规模封号,这个外挂别再用了
  5. Django报错:ValueError: source code string cannot contain null bytes
  6. 深度包检测库nDPI
  7. 【webp】【Java】常用方法示例
  8. 关于Flash/Flex的网站、论坛
  9. 【c语言】4 并发服务器
  10. python tkinter listbox_python tkinter listbox事件绑定