java实现多文件批量下载总结
在工作上回遇到很多需要进行文件批量下载的需求,将多个文件合并成一个zip压缩包进行下载
之前也是参考了其他大佬的博客才有个人使用的总结 在此表示感谢
直接上代码
/*** req 请求头 * response 返回体* fileInfoList 文件信息集合*/public void downForZip(HttpServletRequest req, HttpServletResponse response,List<FileInfo> fileInfoList) {// 创建临时文件File zipFile = null;FileInputStream fis = null;BufferedInputStream buff = null;try {//临时文件名称zipFile = File.createTempFile("test", ".zip");FileOutputStream fot = new FileOutputStream(zipFile);// 为任何OutputStream产生校验,第一个参数是制定产生校验和的输出流,第二个参数是指定Checksum的类型 (Adler32(较快)和CRC32两种)CheckedOutputStream cos = new CheckedOutputStream(fot, new Adler32());// 用于将数据压缩成Zip文件格式ZipOutputStream zos = new ZipOutputStream(cos);for (FileInfo file: fileInfoList) {//根据文件信息获取输入流。这个看实际的业务目的就是获取当前文件的输入流InputStream inputStream = fileService.getFileInpuStream(file.getId(), file.getKey());if (null == inputStream) {break;}// 对于每一个要被存放到压缩包的文件,都必须调用ZipOutputStream对象的putNextEntry()方法,确保压缩包里面文件不同名//多个文件名称重复时zos.putNextEntry()会报错!! 可以再文件名称后面加编号等操作zos.putNextEntry(new ZipEntry(file.getFileName()));int bytesRead = 0;// 向压缩文件中输出数据while ((bytesRead = inputStream.read()) != -1) {zos.write(bytesRead);}inputStream.close();// 当前文件写完,写入下一个文件zos.closeEntry();}zos.close();ServletOutputStream os = response.getOutputStream();//下载文件,使用spring框架中的FileCopyUtils工具response.setCharacterEncoding("GB2312");response.setContentType(req.getSession().getServletContext().getMimeType(file.getFileName()));//设置响应头,attachment表示以附件的形式下载,inline表示在线打开response.setHeader("content-disposition", "attachment;fileName=" + URLEncoder.encode("批量下载.zip", "UTF-8"));fis = new FileInputStream(zipFile);buff = new BufferedInputStream(fis);FileCopyUtils.copy(buff, os);} catch (Exception e1) {throw new BusinessException("批量下载失败");// 关闭流} finally {try {if (null != fis) {fis.close();}if (null != buff) {buff.close();}} catch (IOException e) {log.error( "流关闭异常");}// 删除临时文件if (null != zipFile) {zipFile.delete();}}}
java实现多文件批量下载总结相关推荐
- 【java】 文件批量下载并压缩为zip压缩包
[java] 文件批量下载并压缩为zip压缩包 java常用的压缩技术 java中常见实现压缩与解压 业务场景 代码实现 注意点 java常用的压缩技术 常见的压缩格式有很多种,例如:zip.rar. ...
- java文件批量下载打包成zip
1.首先html页面获取当前需要下载文件的id集合将转成字符串形式传递到后台. ................ 2 .下面就是获取字符串之后的批量下载/*** 多文件批量下载压缩成zip**root ...
- Java的class文件批量反编译成Java文件
Java的class文件批量反编译成java文件 Class文件是java文件编译后产生的一个文件,class文件便于在软件上运行,但是我们无法阅读中间的程序,所以我们需要将class文件转换成jav ...
- 多文件批量下载打包成.zip
多文件批量下载打包成.zip //下载文件打包成zip压缩包@GetMapping("/zip/{id}")public void zip(@PathVariable(" ...
- 亿彩文件批量下载器 v3.0
简介: 亿彩文件批量下载器,主要用于对已知的网络文件的Url,将其批量下载到本地上,并根据需要自动更名下载后的文件,功能丰富强大;支撑大容量几十万几百万条的下载,支持特殊网址的导入,支持保留网络路径结 ...
- JavaScript (mp3、mp4、jpg、doc、txt、rar)单个、多文件批量下载
JavaScript 多文件下载 HTML5中 a 标签新增了一个属性 download,一般情况下,用户点击a链接浏览器会打开对应的链接地址,如果链接地址是一个文件如(xxx.rar.xxx.jpg ...
- react——利用jszip实现文件批量下载并打包成zip文件
本文章主要记录利用jszip实现文件批量下载图片,文档.mp3,视频(MP4)等文件,一般而言前端实现下载功能一般都是通过a链,这在下载单个文件的场景很实用,但如果是批量下载很多个文件,同样也可以用a ...
- 文件批量下载方法 文件批量下载工具
软件版本:Internet Download Manager 在当今数字化时代,我们日常使用电脑进行各种工作和娱乐活动.有时候,我们需要从互联网上下载大量文件,例如电影.音乐.文档等.在这种情况下,手 ...
- c# 多线程多文件批量下载
https://www.cnblogs.com/jianzhan/p/7137485.html c# 多线程多文件批量下载 废话少说,先演示一张效果图 简单说下过程喽 开发过程中其实总是会碰到项目想应 ...
- Java实现文件批量下载,打包成zip压缩包
最近在做一个管理系统的项目,需要实现一个功能,就是批量下载文件,并打包成zip压缩包. 前端通过POST请求传来要下载的文件列表,Java代码实现如下: import java.io.Bu ...
最新文章
- Windows开发环境搭建(安装 VS2010, VS2013, VS2015 Community, Windows Server 2008 R2)
- python里的关键字有哪些_Python中的yield关键字做了什么?
- 从宝马与京东携手,透视汽车后市场变革
- 移动端IM开发者必读(一):通俗易懂,理解移动网络的“弱”和“慢”
- 经典C语言程序100例之四八
- Hbase的WebUI中的RegionServers不显示集群机器域名
- 中断底半部:softirq、tasklet、workqueue
- 解决IE6透明PNG图片的代码
- 用 State Pattern 来实现一个简单的 状态机
- 什么?你竟然还没有用这几个chrome插件? 1
- mysql 亿级高并发_亿级流量系统架构之如何设计每秒十万查询的高并发架构.md
- bnx2: Can't load firmware file bnx2/bnx2-mips-09-6.2.1b.fw
- Ubuntu18.04误删分区表,无法挂载U盘解决
- 斐讯K1、K2、K2P 刷机、刷入Breed@重庆网吧电竞酒店维护小哥
- SqlServer存储过程详解
- Java 构造函数的详解
- 一步一步学Silverlight 2系列(30):使用Transform实现更炫的效果(下)
- 元子弹老师-吉他指弹右手技巧
- 网页设计的秘诀:如何用颜色烘托情感
- android读写删file,Android文件(File)操作
热门文章
- autoCAD恐吓式销售_恐吓式软文的例子 恐吓式软文营销案例分享
- Centos 8 安装 Openbravo 之安装 httpd mod_jk
- 在eclipse部署OpenBravo项目
- python上机考试题库_易考吧-2021年无纸化考试专用全国计算机等级考试上机考试题库:二级Python(含二级公共基础知识)...
- matlab fft 采样点数,MATLAB中的FFT的采样频率和采样点怎样确定
- wincap安装内幕
- vue v-for循环表格 希望第四个<th>或<td>标签自动换到下一行应该怎么做?
- 【beyong-sms】一款支持多家短信服务商优美的PHP短信发送库
- Beyong Compare 4 提示 “这个授权已被吊销” 的解决办法
- 732 我的日程安排表 III(差分思想)