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

 //下载文件打包成zip压缩包@GetMapping("/zip/{id}")public void zip(@PathVariable("id") Integer id,HttpServletResponse res){List<TFileInfo> list = this.getById(id);List<File> files=new ArrayList<>();try {list.forEach(k->{if (Objects.nonNull(k.getLocation())){String path = null;try {path = ResourceUtils.getURL("server" + "\\" + k.getLocation()).getPath();} catch (FileNotFoundException e) {e.printStackTrace();}files.add(new File(path));}});files.forEach(k->{if (!k.exists()){return;}});//设置响应头String downloadName= UUID.randomUUID()+ ".zip";HttpServletResponse response = CompressDownloadUtil.setDownloadResponse(res, downloadName);String zipFilePath=this.setZipFilePath(downloadName);//将多个文件压缩到指定路径下CompressDownloadUtil.compressZip(files,new FileOutputStream(zipFilePath));//-- 下载压缩包CompressDownloadUtil.downloadFile(response.getOutputStream(), zipFilePath);//-- 删除临时生成的ZIP文件CompressDownloadUtil.deleteFile(zipFilePath);} catch (IOException e) {e.printStackTrace();}}

工具类

package com.abc.util;import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import javax.servlet.http.HttpServletResponse;
import lombok.extern.slf4j.Slf4j;/*** 压缩下载工具类** @author hongwei.lian* @date 2018年9月6日 下午6:34:56*/
@Slf4j
public class CompressDownloadUtil {private CompressDownloadUtil() {}/*** 设置下载响应头** @param response* @return * @author hongwei.lian* @date 2018年9月7日 下午3:01:59*/public static HttpServletResponse setDownloadResponse(HttpServletResponse response, String downloadName) {response.reset();response.setCharacterEncoding("utf-8");response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment;fileName*=UTF-8''"+ downloadName);return response;}/*** 字符串转换为整型数组** @param param* @return * @author hongwei.lian* @date 2018年9月6日 下午6:38:39*/public static Integer[] toIntegerArray(String param) {return Arrays.stream(param.split(",")).map(Integer::valueOf).toArray(Integer[]::new);}/*** 将多个文件压缩到指定输出流中** @param files 需要压缩的文件列表* @param outputStream  压缩到指定的输出流* @author hongwei.lian* @date 2018年9月7日 下午3:11:59*/public static void compressZip(List<File> files, OutputStream outputStream) {ZipOutputStream zipOutStream = null;try {//-- 包装成ZIP格式输出流zipOutStream = new ZipOutputStream(new BufferedOutputStream(outputStream));// -- 设置压缩方法zipOutStream.setMethod(ZipOutputStream.DEFLATED);//-- 将多文件循环写入压缩包for (int i = 0; i < files.size(); i++) {File file = files.get(i);FileInputStream filenputStream = new FileInputStream(file);byte[] data = new byte[(int) file.length()];filenputStream.read(data);//-- 添加ZipEntry,并ZipEntry中写入文件流,这里,加上i是防止要下载的文件有重名的导致下载失败zipOutStream.putNextEntry(new ZipEntry(i + file.getName()));zipOutStream.write(data);filenputStream.close();zipOutStream.closeEntry();}} catch (IOException e) {//          Xlogger.error(XMsgError.buildSimple(CompressDownloadUtil.class.getName(), "downloadallfiles", e));log.error(CompressDownloadUtil.class.getName(),e);}  finally {try {if (Objects.nonNull(zipOutStream)) {zipOutStream.flush();zipOutStream.close();}if (Objects.nonNull(outputStream)) {outputStream.close();}} catch (IOException e) {//              Xlogger.error(XMsgError.buildSimple(CompressDownloadUtil.class.getName(), "downloadallfiles", e));log.error(CompressDownloadUtil.class.getName(),e);}}}/*** 下载文件** @param outputStream 下载输出流* @param zipFilePath 需要下载文件的路径* @author hongwei.lian* @date 2018年9月7日 下午3:27:08*/public static void downloadFile(OutputStream outputStream, String zipFilePath) {File zipFile = new File(zipFilePath);if (!zipFile.exists()) {//-- 需要下载压塑包文件不存在return ;}FileInputStream inputStream = null;try {inputStream = new FileInputStream(zipFile);byte[] data = new byte[(int) zipFile.length()];inputStream.read(data);outputStream.write(data);outputStream.flush();} catch (IOException e) {//          Xlogger.error(XMsgError.buildSimple(CompressDownloadUtil.class.getName(), "downloadZip", e));log.error(CompressDownloadUtil.class.getName(),e);} finally {try {if (Objects.nonNull(inputStream)) {inputStream.close();}if (Objects.nonNull(outputStream)) {outputStream.close();}} catch (IOException e) {//              Xlogger.error(XMsgError.buildSimple(CompressDownloadUtil.class.getName(), "downloadZip", e));log.error(CompressDownloadUtil.class.getName(),e);}}}/*** 删除指定路径的文件** @param filepath * @author hongwei.lian* @date 2018年9月7日 下午3:44:53*/public static void deleteFile(String filepath) {File file = new File(filepath);deleteFile(file);}/*** 删除指定文件** @param file * @author hongwei.lian* @date 2018年9月7日 下午3:45:58*/public static void deleteFile(File file) {//-- 路径为文件且不为空则进行删除  if (file.isFile() && file.exists()) {  file.delete();  } }}

运行结果

多文件批量下载打包成.zip相关推荐

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

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

  2. Java实现批量下载(打包成zip)

    批量下载 引言 一.前端JS发送下载请求 1.ajax无法发送下载请求 2.js发送下载请求:超链接方式 3.js发送下载请求:拼接Form表单,并提交 二.后台处理 三.结束 引言 批量下载思路,首 ...

  3. EasyExcel3.0.5 导出多个sheet,批量下载打包成ZIP压缩包

    多sheet导出并批量下载附件 前言 源码 代码实现 Controller 接口类 实现类 (重中之重) 实现类重点强调 测试 结语 前言 最近浏览语雀社区官网,里面有一篇 easyexcel 里面 ...

  4. gin 前端文件打包_远程URL文件批量下载打包的方法

    开始 最近代码重构遇到了一个问题,需要把OSS 上的一批图片打包下载 旧服务器的硬盘是直接挂载OSS,所以直接调的Linux系统命令复制打包,所以速度比较快.新服务器重构代码行不通,这样做也不好 查阅 ...

  5. Java实现文件批量下载,打包成zip压缩包

       最近在做一个管理系统的项目,需要实现一个功能,就是批量下载文件,并打包成zip压缩包.    前端通过POST请求传来要下载的文件列表,Java代码实现如下: import java.io.Bu ...

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

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

  7. C# 将服务器文件批量压缩打包下载至本地两种方法(压缩包缓存到服务器下载、压缩包缓存到内存下载)

    1.将服务器文件打包下载至本地(压缩包缓存到服务器下载) (1)文件批量压缩成压缩包并缓存到服务器(公共方法) using ICSharpCode.SharpZipLib.Checksums; usi ...

  8. react——利用jszip实现文件批量下载并打包成zip文件

    本文章主要记录利用jszip实现文件批量下载图片,文档.mp3,视频(MP4)等文件,一般而言前端实现下载功能一般都是通过a链,这在下载单个文件的场景很实用,但如果是批量下载很多个文件,同样也可以用a ...

  9. 关于springmvc下服务器文件打包成zip格式下载功能

    关于springmvc下服务器文件打包成zip格式下载功能 2016年09月21日 11:22:14 toxic_guantou 阅读数:5731更多 个人分类: 技术点存储 版权声明:本文为博主原创 ...

最新文章

  1. android staido 断点遇到的坑
  2. 数据中台建设常见的几大误区,如何规避,你需要知道这几点
  3. ML之FE:对爬取的某平台二手房数据进行数据分析以及特征工程处理
  4. Python中json模块的使用,以及json.loads()和json.dumps()的区别
  5. 由旋转矩阵计算欧拉角的方法
  6. ora错误匹配java_上周上线碰见的ORA-00054错误回放
  7. 【Keil】Keil5无法更改背景色和字体解决方案
  8. 用maven搭建多模块项目
  9. 嵌入式开发之视频压缩比---h264、mjpeg、mpeg4
  10. pyhton学习-1
  11. 【渝粤教育】国家开放大学2018年春季 8038-21T实用管理基础 参考试题
  12. 第一个包不是SYN包?用科来数据包分析软件排除一次故障。
  13. 从智慧零售,看腾讯的数字化转型之道
  14. pragma comment的使用
  15. 【JAVA百炼成仙】特别篇——(三个IO练习题)
  16. PEI-NaYF4:Yb/Er上转换发光纳米材料,树状水溶性聚合物,45nm粒径纳米粒
  17. pixhawk RC信号传输流程 代码版本pixhawk1.5.5
  18. 网络安全风险与防范方法
  19. 四轮转向系统横摆角速度控制simulink仿真模型,利用滑模控制算法,基于八自由度车辆模型
  20. ATF(Arm Trusted Firmware)/TF-A Chapter 01. 介绍

热门文章

  1. [Excel]rank函数实现自动排序
  2. Linux 中断管理之ARM GIC V3 初始化
  3. 万年历单片机c语言,c51单片机万年历的c程序
  4. html背景对联效果恭贺新春,恭贺新春的对联
  5. C语言算一维数组均值和标准差(随机生成数组0~100)
  6. yum.repos.d目录中文件消失如何解决
  7. 婚房布置清单 婚房布置图片大全 婚房布置效果图
  8. 【笔试题】求最小公倍数 C++(两种方法)
  9. JAVA并发编程-视频教程
  10. 公众号如何用微信红包吸粉而不被封号?实战24天10万粉