springboot 多文件压缩下载(流)
zip工具类:
/*** 把文件打成压缩包并输出到客户端浏览器中*/public static void downloadZipFiles(HttpServletResponse response, List<String> srcFiles, String zipFileName) {try {response.reset(); // 重点突出response.setCharacterEncoding("UTF-8"); // 重点突出response.setContentType("application/x-msdownload"); // 不同类型的文件对应不同的MIME类型 // 重点突出// 对文件名进行编码处理中文问题zipFileName = new String(zipFileName.getBytes(), StandardCharsets.UTF_8);// inline在浏览器中直接显示,不提示用户下载// attachment弹出对话框,提示用户进行下载保存本地// 默认为inline方式response.setHeader("Content-Disposition", "attachment;filename=" + zipFileName);// --设置成这样可以不用保存在本地,再输出, 通过response流输出,直接输出到客户端浏览器中。ZipOutputStream zos = new ZipOutputStream(response.getOutputStream());zipFile(srcFiles, zos);} catch (IOException e) {e.printStackTrace();}}/*** 压缩文件** @param filePaths 需要压缩的文件路径集合* @throws IOException*/private static void zipFile(List<String> filePaths, ZipOutputStream zos) {//设置读取数据缓存大小byte[] buffer = new byte[4096];try {//循环读取文件路径集合,获取每一个文件的路径for (String filePath : filePaths) {File inputFile = new File(filePath);//判断文件是否存在if (inputFile.exists()) {//判断是否属于文件,还是文件夹if (inputFile.isFile()) {//创建输入流读取文件BufferedInputStream bis = new BufferedInputStream(new FileInputStream(inputFile));//将文件写入zip内,即将文件进行打包zos.putNextEntry(new ZipEntry(inputFile.getName()));//写入文件的方法,同上int size = 0;//设置读取数据缓存大小while ((size = bis.read(buffer)) > 0) {zos.write(buffer, 0, size);}//关闭输入输出流zos.closeEntry();bis.close();} else { //如果是文件夹,则使用穷举的方法获取文件,写入zipFile[] files = inputFile.listFiles();List<String> filePathsTem = new ArrayList<String>();for (File fileTem : files) {filePathsTem.add(fileTem.toString());}zipFile(filePathsTem, zos);}}}} catch (IOException e) {e.printStackTrace();} finally {if (null != zos) {try {zos.close();} catch (IOException e) {e.printStackTrace();}}}}
controller:
/*** @description: zip* @return: com.ddkj.common.utils.RetMessage* @author: Jay* @date: 2019-12-27 14:15*/@RequestMapping("/packageZip")public RetMessage packageZip(@RequestParam Map<String, Object> params, HttpServletResponse respons){EntityWrapper<PbFileEntity> wrapper = new EntityWrapper<>();if(params.get("repairTaskId") != null ){if(params.get("type") != null){wrapper.eq("type",params.get("type"));wrapper.eq("repair_task_id",params.get("repairTaskId"));List<PbFileEntity> pbFileEntities = pbFileService.selectList(wrapper);List<String> list = new ArrayList<>();if (pbFileEntities != null && pbFileEntities.size()>0) {for (PbFileEntity pbFileEntity : pbFileEntities) {list.add(pbFileEntity.getUrl());}}if(list != null && list.size()>0){FileUtils.downloadZipFiles(respons,list,"image.zip");return null;}}}return RetMessage.error();}
springboot 多文件压缩下载(流)相关推荐
- java实现下载压缩文件_java实现文件压缩下载----压缩下载zip
文件压缩下载 Controller层: /** *文件压缩下载 *billname:文件名 *filename:文件存放路径 */ public void downloadsource(HttpSer ...
- 批量文件压缩下载(zip)
ps:工作之余仅留备份用,未全面完善,请按需取用 一.主要关注两点:1.找到文件并压缩:2.通过文件输出流响应前端 @RestController @RequestMapping("/fil ...
- Java多文件压缩下载解决方案
Java多文件压缩下载解决方案 需求: 会员运营平台经过改版后页面增加了许多全部下载链接,上周上线比较仓促,全部下载是一个直接下载ZIP压缩文件的链接,每个ZIP压缩文件都是由公司运营人员将页面需要下 ...
- php excel模板导出、openoffice excel转pdf、多文件压缩下载
最近两周都在弄关于excel模板导出.excel转pdf.多文件压缩下载.弄得头都大了,接下来说说实现的方法吧. 我用的是laravel5.1的框架,读取模板生成excel,并且插入图片,直接上代码 ...
- 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 ...
- Nodejs做后端,实现文件压缩下载的几种方案(archiver、compressing、linux的zip命令):
一. Archiver 1. 安装 npm install archiver 2. 使用 由于需要做文件操作,所以我们需要将fs库也引进来 先创建一个可写流,用于传入压缩包数据 再创建一个archiv ...
- 调用cmd方法,用于网盘文件压缩下载
cmd = cmd.Trim().TrimEnd('&') + "&exit";//说明:不管命令是否成功均执行exit命令,否则当调用ReadToEnd()方法时 ...
- SpringBoot实现多文件压缩下载.zip
前言:服务器生成多个文本文件.需要打包一次返回下载.例如:xml,word,excel try {response.setHeader("Content-Disposition", ...
最新文章
- 修改innodb_flush_log_at_trx_commit参数提升insert性能
- 排序字段设计_内容搜索排序表达式的最佳实践
- 数组模拟加法(每日一练 11.30)
- iOS关键代码遭泄露;Google正式抛弃HTTP;微博网页版出故障 | 一周业界事
- win7 mac虚拟机linux,Mac虚拟机parallels desktop超详细安装Win7图文分解
- 基于SpringBoot/SSM的旅游论坛
- BigDecimal的精度舍入模式详解
- 变频器的工作原理与结构介绍
- js中函数的传递参数
- (成功解决)网页无法打开位于http://www.baidu.com/的网页无法加载,因为:net:ERR_NAME_NOT_RESOLVED
- 生日悖论分析python_Python数据分析养成记4——预测泰坦尼克号生存概率
- 需要验证的网络连接服务器,登录iCloud提示验证失败,连接到服务器时出现问题怎么办...
- Opencv源码之平面点集的最小包围圆
- Columns函数:返回数据表区域的总列数。
- http-parser用法
- Android targetSdkVersion从23升级到26适配指南
- 手机录屏并转换成gif动图
- nacos 单机部署_使用Docker部署Nacos-Server(单机版)
- YTU OJ 2914 Problem A xiaoping学构造函数
- 猫和路由器是完全两码事!!!!
热门文章
- 4pl参数拟合python程序
- error C3867: “XXX::XXX”: 非标准语法;请使用 ““ 来创建指向成员的指针。
- 解决无法使用gpt的问题
- 循环肿瘤细胞(CTCs)分选进样系统微小正负压精密控制的解决方案
- 智能车电磁环岛处理方法_UV漆与TPU智能手表套附着力差解决方法之TPU处理剂
- (附源码)计算机毕业设计SSM基于web的小说浏览系统
- 桌面只计算机图标发白,电脑桌面上的文件夹变成白色的图标如何解决
- 笔记本玩游戏设置全屏
- 5000元性价比高的笔记本_5000左右的笔记本哪款好 2018高性价比笔记本推荐
- netty Recycler(一)