java web 实现多个文件压缩下载
文件下载时,我们可能需要一次下载多个文件。批量下载文件时,需要将多个文件打包为zip,然后再下载。实现思路有两种:一是将所有文件先打包压缩为一个文件,然后下载这个压缩包,二是一边压缩一边下载,将多个文件逐一写入到压缩文件中。我这里实现了边压缩边下载。
下载样式:
点击下载按钮,会弹出下载框:
下载后就有一个包含刚刚选中的两个文件:
代码实现:
FileBean
public class FileBean implements Serializable {private Integer fileId;// 主键private String filePath;// 文件保存路径private String fileName;// 文件保存名称public FileBean() {}public Integer getFileId() {return fileId;}public void setFileId(Integer fileId) {this.fileId = fileId;}public String getFilePath() {return filePath;}public void setFilePath(String filePath) {this.filePath = filePath;}public String getFileName() {return fileName;}public void setFileName(String fileName) {this.fileName = fileName;}}
控制层:
@RequestMapping(value = "/download", method = RequestMethod.GET)public String download(String id, HttpServletRequest request,HttpServletResponse response) throws IOException {String str = "";if (id != null && id.length() != 0) {int index = id.indexOf("=");str = id.substring(index + 1);String[] ids = str.split(",");ArrayList<FileBean> fileList = new ArrayList<FileBean>();for (int i = 0; i < ids.length; i++) {// 根据id查找genericFileUpload,得到文件路径以及文件名GenericFileUpload genericFileUpload = new GenericFileUpload();genericFileUpload = genericFileUploadService.find(Long.parseLong(ids[i]));FileBean file = new FileBean();file.setFileName(genericFileUpload.getFileName());file.setFilePath(genericFileUpload.getFilePath());fileList.add(file);}//设置压缩包的名字//解决不同浏览器压缩包名字含有中文时乱码的问题String zipName = "download.zip";response.setContentType("APPLICATION/OCTET-STREAM");response.setHeader("Content-Disposition", "attachment; filename="+ zipName);//设置压缩流:直接写入response,实现边压缩边下载ZipOutputStream zipos =null;try{zipos=new ZipOutputStream(new BufferedOutputStream(response.getOutputStream()));zipos.setMethod(ZipOutputStream.DEFLATED);//设置压缩方法 }catch(Exception e){e.printStackTrace();}DataOutputStream os=null;//循环将文件写入压缩流for(int i=0;i<fileList.size();i++){String filePath=fileList.get(i).getFilePath();String fileName=fileList.get(i).getFileName();File file=new File(filePath+"/"+fileName);//要下载文件的路径try{//添加ZipEntry,并ZipEntry中写入文件流//这里,加上i是防止要下载的文件有重名的导致下载失败zipos.putNextEntry(new ZipEntry(i+fileName));os=new DataOutputStream(zipos);InputStream is=new FileInputStream(file);byte[] b = new byte[100];int length = 0;while((length = is.read(b))!= -1){os.write(b, 0, length);}is.close();zipos.closeEntry();}catch(Exception e){e.printStackTrace();}}//关闭流try {os.flush();os.close();zipos.close();} catch (IOException e) {e.printStackTrace();} }return "redirect:list.jhtml";}
java web 实现多个文件压缩下载相关推荐
- Java Web实现 使用浏览器从服务器下载文件
Java Web实现 使用浏览器从服务器下载文件. 代码实现: package com.juneyaoair.util;import lombok.SneakyThrows;import javax. ...
- Java多文件压缩下载解决方案
Java多文件压缩下载解决方案 需求: 会员运营平台经过改版后页面增加了许多全部下载链接,上周上线比较仓促,全部下载是一个直接下载ZIP压缩文件的链接,每个ZIP压缩文件都是由公司运营人员将页面需要下 ...
- java实现下载压缩文件_java实现文件压缩下载----压缩下载zip
文件压缩下载 Controller层: /** *文件压缩下载 *billname:文件名 *filename:文件存放路径 */ public void downloadsource(HttpSer ...
- java实现文件压缩下载----压缩下载zip
文件压缩下载 Controller层: /** *文件压缩下载 *billname:文件名 *filename:文件存放路径 */ public void downloadsource(HttpSer ...
- java实现文件压缩下载
文件压缩下载 package com.ruoyi.utils; import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.uti ...
- 批量文件压缩下载(zip)
ps:工作之余仅留备份用,未全面完善,请按需取用 一.主要关注两点:1.找到文件并压缩:2.通过文件输出流响应前端 @RestController @RequestMapping("/fil ...
- IntelliJ IDEA 中的Java Web项目的资源文件复制新增如何更新到部署包中?
文章目录 resources目录下的文件复制新增 webapp目录的文件复制新增 IntelliJ IDEA 中的Java Web项目的资源文件如果复制新增,正常的重新部署.重启服务器.update ...
- php excel模板导出、openoffice excel转pdf、多文件压缩下载
最近两周都在弄关于excel模板导出.excel转pdf.多文件压缩下载.弄得头都大了,接下来说说实现的方法吧. 我用的是laravel5.1的框架,读取模板生成excel,并且插入图片,直接上代码 ...
- Java多线程实现多文件压缩下载
1.java多线程通过多个路径压缩为一个zip文件 import lombok.Data; import org.springframework.util.CollectionUtils; impor ...
最新文章
- Leetcode - Subsets I,II
- Linux环境安装zookeeper3.5.5后,总是启动不了
- python-if条件判断与while/for循环
- RMI和WebService
- More Effective C++ (限制类的对象数量)
- MYSQL 的集群
- java向kafka推送数据_Java编写程序将数据存入Kafka中
- 中国天然驱蚊剂行业市场供需与战略研究报告
- 20190904:(leetcode习题)合并两个有序数组
- python3怎么安装opencv_Python:即使安装了opencv,也无法导入cv2(如何为python3安装opencv3)...
- MySQL 5.7主从复制从零开始设置及全面详解——实现多线程并行同步,解决主从复制延迟问题!...
- python数字图像处理(9):直方图与均衡化
- 第 25 章 基于小波变换的数字水印技术
- adb 版本更新后执行依旧是旧版本解决方法
- 2022蓝桥杯——砍竹子
- python函数def无效_python自定义函数def的应用详解
- 【项目管理】测量绩效域管理
- 实用的Word文档翻译方法分享,让Word文档快速翻译
- uni-app学习 style样式和三元运算符用法(三)
- 四色问题:证明、推广和应用