批量下载文件为zip包的工具类

package com.meeno.trainsys.util;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.net.URLEncoder;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;/*** @description: 批量下载文件* @author: Wzq* @create: 2019-11-25 10:17*/
public class BatchDownFilesUtils {/***@Description 输入文件集合,zipPath临时路径,request,response导出zip文件*@Param [files, zipPath, request, response]*@Return javax.servlet.http.HttpServletResponse*@Author Wzq*@Date 2019/11/25*@Time 19:49*/public static HttpServletResponse downLoadFiles(List<File> files,String zipPath,HttpServletRequest request, HttpServletResponse response)throws Exception {try {/**这个集合就是你想要打包的所有文件,* 这里假设已经准备好了所要打包的文件*///List<File> files = new ArrayList<File>();/**创建一个临时压缩文件,* 我们会把文件流全部注入到这个文件中* 这里的文件你可以自定义是.rar还是.zip* 这里的file路径发布到生产环境时可以改为*/File file = new File(zipPath);if (!file.exists()){file.createNewFile();}response.reset();//response.getWriter()//创建文件输出流FileOutputStream fous = new FileOutputStream(file);/**打包的方法我们会用到ZipOutputStream这样一个输出流,* 所以这里我们把输出流转换一下*///            org.apache.tools.zip.ZipOutputStream zipOut//                = new org.apache.tools.zip.ZipOutputStream(fous);ZipOutputStream zipOut= new ZipOutputStream(fous);/**这个方法接受的就是一个所要打包文件的集合,* 还有一个ZipOutputStream*/zipFile(files, zipOut);zipOut.close();fous.close();return downloadZip(file,response);}catch (Exception e) {e.printStackTrace();}/**直到文件的打包已经成功了,* 文件的打包过程被我封装在FileUtil.zipFile这个静态方法中,* 稍后会呈现出来,接下来的就是往客户端写数据了*/// OutputStream out = response.getOutputStream();return response ;}/*** 把接受的全部文件打成压缩包* @param List<File>;* @param org.apache.tools.zip.ZipOutputStream*/private static void zipFile(List files,ZipOutputStream outputStream) {int size = files.size();for(int i = 0; i < size; i++) {File file = (File) files.get(i);zipFile(file, outputStream);}}/***@Description 下载zip文件,删除缓存文件*@Param [file, response]*@Return javax.servlet.http.HttpServletResponse*@Author Wzq*@Date 2019/11/25*@Time 19:48*/private static HttpServletResponse downloadZip(File file, HttpServletResponse response) {try {// 以流的形式下载文件。InputStream fis = new BufferedInputStream(new FileInputStream(file.getPath()));byte[] buffer = new byte[fis.available()];fis.read(buffer);fis.close();// 清空responseresponse.reset();OutputStream toClient = new BufferedOutputStream(response.getOutputStream());response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(file.getName(),"UTF-8"));toClient.write(buffer);toClient.flush();toClient.close();} catch (IOException ex) {ex.printStackTrace();}finally{try {File f = new File(file.getPath());f.delete();} catch (Exception e) {e.printStackTrace();}}return response;}/*** 根据输入的文件与输出流对文件进行打包* @param File* @param org.apache.tools.zip.ZipOutputStream*/private static void zipFile(File inputFile,ZipOutputStream ouputStream) {try {if(inputFile.exists()) {/**如果是目录的话这里是不采取操作的,* 至于目录的打包正在研究中*/if (inputFile.isFile()) {FileInputStream IN = new FileInputStream(inputFile);BufferedInputStream bins = new BufferedInputStream(IN, 512);//org.apache.tools.zip.ZipEntryZipEntry entry = new ZipEntry(inputFile.getName());ouputStream.putNextEntry(entry);// 向压缩文件中输出数据int nNumber;byte[] buffer = new byte[512];while ((nNumber = bins.read(buffer)) != -1) {ouputStream.write(buffer, 0, nNumber);}// 关闭创建的流对象bins.close();IN.close();} else {try {File[] files = inputFile.listFiles();for (int i = 0; i < files.length; i++) {zipFile(files[i], ouputStream);}} catch (Exception e) {e.printStackTrace();}}}} catch (Exception e) {e.printStackTrace();}}}

使用批量下载方法

在controller代码层使用批量下载工具类中的方法,把多个file文件打包成zip下载!

  List<File> fileList = Lists.newArrayList(); //文件的集合String zipFilePath = "E:\test\xxx.zip"; //zip缓存的位置,方法工具类中方法下载完成后删除缓存zipBatchDownFilesUtils.downLoadFiles(fileList,zipFilePath,request,response); //调用下载方法

个人微信公众,经常更新一些实用的干货:

java批量下载文件为zip包相关推荐

  1. JAVA 批量下载文件

    最近项目有个需求,用户想对挂有附件的数据记录 实现一键下载全部附件(目前项目仅支持每次点击单条记录进行附件下载),下面记录我实现的解决方案. 项目框架基于SSM service业务实现层(impl): ...

  2. java批量添加文件到ZIP压缩包并下载,文件名相同导致的异常

    做了个批量将文件添加为ZIP并下载的功能. 然后发现下载的文件数量变少了,原因是因为其中有些文件的文件名是相同的. 而ZipOutputStream流的这个方法,是无法添加相同文件名的内容. zos. ...

  3. java后台批量下载文件压缩ZIP

    @RequestMapping(value = "xxx/xxx",method = RequestMethod.POST )@ResponseBodypublic Map< ...

  4. angular4 下载文件 Excel zip包

    1.下载Excel 文件 import { ResponseContentType } from '@angular/http';exportInternalOrder(body) {let user ...

  5. java文件批量下载打包成zip

    1.首先html页面获取当前需要下载文件的id集合将转成字符串形式传递到后台. ................ 2 .下面就是获取字符串之后的批量下载/*** 多文件批量下载压缩成zip**root ...

  6. 多文件批量下载打包成.zip

    多文件批量下载打包成.zip //下载文件打包成zip压缩包@GetMapping("/zip/{id}")public void zip(@PathVariable(" ...

  7. java 批量下载图片,批量打包文件并下载

    1.批量下载网页上,动态生成的图片到服务器上指定的目录中 2.将目录中的所有的图片打包成zip包 3.删除原来的目录 4.下载zip包 1:由于网页上的图片是全部都是连接动态生成的,所以同事在网上找了 ...

  8. java批量下载demo_OBS JAVA SDK 实践8:批量下载文件(e.g 下载文件夹)

    1背景介绍& 效果展示 通过OBS JAVA SDK可以实现批量下载文件,如下载文件夹,效果如下. 注:有关标准存储.低频访问.归档存储三种存储类型的更多信息,参考链接:https://sup ...

  9. java批量下载多个文件并压缩

    java批量下载多个文件并压缩 本段代码的功能主要是实现通过文件主键,循环遍历下载各种格式的文件,下载后由java数据流处理压缩成一个zip格式的压缩包返回给前端页面. 后端实现控制层(Control ...

最新文章

  1. 浏览新闻oracle的数据结构,oracle 数据结构探索之旅二 [2]
  2. vb编程转为c语言,C语言,VB编程题
  3. QLineEdit响应回车时避免Button同时响应
  4. Java虚拟机字节码指令概述
  5. 【Matlab】定义顺序增加的字符串数组(A1,A2 ... An)并写到Excel的第一行
  6. 利用Jenkins实现JavaWeb项目的自动化部署
  7. curl_init()和curl_multi_init()多线程的速度比较
  8. 嵌入式linux应用程序开发详解_【精品套餐】嵌入式linux应用驱动开发完全学习路线...
  9. php api 实例maccms,苹果cmsV10API接口说明
  10. Axis2 WebService(配置、发布、调用)
  11. Codeforces 408D Long Path (DP)
  12. C/C++获取指定网口的IP地址
  13. XP共享拒绝访问,全面解决
  14. Services in Kubernetes
  15. Flink在饿了么的应用与实践
  16. 湘潭大学计算机学院考研喜报,湘潭大学化学学院考研率连续七年在全校排名第一...
  17. 南京大学计算机专业考研难吗,计算机专业考研,除了南大和中山,还有哪些大学难度大性价比高...
  18. 【完结!】数据挖掘从入门到放弃(五)seaborn 的数据可视化
  19. 权限控制-@Secured注解
  20. Python Data mining - Enron Email Dataset

热门文章

  1. 如何安装python3.7.4_银河麒麟安装Python3.7.4以及升级自带OpenSSL
  2. python怎么判断是不是列表_python判断变量是否为int、字符串、列表、元组、字典等方法...
  3. 在线绘图|2分钟轻松搞定桑基图(Sankey diagrams)
  4. Wiley-中国科学院文献情报中心开放科学联合研讨会第一讲:开放科学全球和中国发展态势...
  5. MPB:甘肃省科学院祝英等-药用植物地下茎内生真菌的分离纯化及鉴定
  6. Gut:粪便病毒组移植减轻2型糖尿病和肥胖症模型小鼠的相关症状
  7. Nature:拟南芥根系微生物组的结构
  8. 微生物组-扩增子16S分析研讨会(2020.1)
  9. AI打败外科医生:机器人做手术,你敢来一刀吗?
  10. 扩增子统计绘图6韦恩图:比较组间共有和特有OTU或分类单元