1.首先html页面获取当前需要下载文件的id集合将转成字符串形式传递到后台。
。。。。。。。。。。。。。。。。
2 、下面就是获取字符串之后的批量下载/*** 多文件批量下载压缩成zip**rootPath** */@RequiresPermissions(value = "/file/download")@RequestMapping(value = "/file/downFiles", method = RequestMethod.GET)public ModelAndView downFilesPost(HttpServletRequest request, HttpServletResponse response) {// 选中文件ID拼接的字符串// String idxs ="8abc83566c17147a016c177d9d100000,8abc83566c03a4d3016c03b388510004,8abc83566c03a4d3016c03b0ba170003";String idxs=request.getParameter("ids");List<String> downLoadPaths = new ArrayList<String>();//存储选中文件的下载地址OutputStream res = null;ZipOutputStream zos = null;String outPath;String lessionIdStr;String fileName; //浏览器下载弹出框中显示的文件名downLoadPaths.clear();String firstFileName = "";// 第一个文件的文件名List<mtrbTrainFileModel> fileVos = new LinkedList<mtrbTrainFileModel>();if (StringUtils.isNotEmpty(idxs)) {int end = idxs.lastIndexOf(",");if (end > 0) {if (end == idxs.length() - 1) {idxs = idxs.substring(0, end);}String[] ids = idxs.split(",");for (int i = 0; i < ids.length; i++) {mtrbTrainFileModel mtrbmodel = trainFileService.get(mtrbTrainFileModel.class, (ids[i]));fileVos.add(mtrbmodel);//拼接urlString url = rootPath + mtrbmodel.getFileUrl();downLoadPaths.add(url);}if (downLoadPaths.size() != 0) {byte[] buf = new byte[8192];int len;try {String zipName = "【批量下载】" + fileVos.get(0).getFileName() + "等.zip";String filename = "";filename = new String(zipName.getBytes("utf-8"), "ISO8859_1");res = response.getOutputStream();// 清空输出流(在迅雷下载不会出现一长窜)response.reset();// 设定输出文件头response.setHeader("Content-Disposition", "attachment;fileName="+ filename);response.setContentType("application/zip");zos = new ZipOutputStream(res);for (mtrbTrainFileModel fileVo : fileVos) {File file=new File(rootPath+fileVo.getFileUrl());//设置后缀格式String[] fileN = fileVo.getFileUrl().split("\\.");ZipEntry ze = new ZipEntry(fileVo.getFileName() + "." + fileN[1]);zos.putNextEntry(ze);BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));while ((len = bis.read(buf)) > 0) {zos.write(buf, 0, len);}bis.close();zos.closeEntry();}
/*if (i == 0) {//只有一个的时候//  firstFileName = lession.getLessionName();}*/} catch (Exception e) {e.printStackTrace();}}try{if (zos != null) {zos.close();}if (res != null) {res.close();}}catch (Exception e){e.printStackTrace();}}else{ModelAndView mav = new ModelAndView();mav.setViewName("forward:/file/downFile?fileId="+idxs);return  mav;//System.out.print("ddd");}}return null;}
/*** 下载培训文件(仅一条)* syq** */
@RequiresPermissions(value = "/file/download")
@RequestMapping(value = "/file/downFile", method = RequestMethod.GET)
public void downFilePost(HttpServletRequest request,HttpServletResponse response ) {String fileId = request.getParameter("fileId");mtrbTrainFileModel mtrbmodel = trainFileService.get(mtrbTrainFileModel.class, fileId);//拼接urlString url=rootPath+mtrbmodel.getFileUrl();//设置后缀格式String []fileN=mtrbmodel.getFileUrl().split("\\.");String fileName=mtrbmodel.getFileName()+"."+fileN[1];File file= new File(url);//若文件不存在if ( !file.exists()) {response.setCharacterEncoding("UTF-8");response.setContentType("text/html;charset=UTF-8");//设置响应内容和编码规则OutputStream out = null;try {response.getWriter().print("<script type='text/javascript'>alert('文件不存在 ')</script>");response.getWriter().close();} catch (IOException e) { e.printStackTrace();}finally{try { if(out != null){out.close(); }} catch (IOException e) { e.printStackTrace(); }}}//        -----------------------------------------------------FileInputStream fis = null;OutputStream toClient = null;try {String agent = request.getHeader("USER-AGENT");if (null != agent && -1 != agent.indexOf("MSIE")) {String encodeName = URLEncoder.encode(fileName, "UTF-8");encodeName = encodeName.replaceAll("\\+", "%20");//处理空格,空格会被编码成+,转化为%20if (-1 != agent.indexOf("MSIE 6.0") && encodeName.length() > 150) {//IE6下最长支持150个字符左右,一个汉字占9位编码,最多17个汉字//这个方式在IE8下 字符集在gb2312内的是可以的,IE6又不支持,那IE6下面超过15个汉字就只能被自动截断了...//fileName=new String(fileName.getBytes("gb2312"),"ISO8859-1");//如果文件名里面包含了非gb2312编码的字,比如繁体字,就不行了呀fileName = encodeName;//如有解决办法,更改此行} else {fileName = encodeName;}} else if (null != agent && -1 != agent.toLowerCase().indexOf("rv:11")) {fileName = URLEncoder.encode(fileName, "UTF-8");} else {fileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");}// 清空responseresponse.reset();// response.setContentType("text/html;charset=utf-8");// 设置response的Header//response.addHeader("Content-Disposition", "attachment;filename="+ new String(fileName.getBytes()));response.addHeader("Content-Disposition", "attachment;filename=\"" + fileName + "\"");//火狐读取文件名时,遇到空格就只取空格前面的,把文件名用双引引起来就好了//response.addHeader("Content-Length", "" + file.length());fis = new FileInputStream(file);System.out.print("url=="+url);//toClient = new BufferedOutputStream(response.getOutputStream());toClient = response.getOutputStream();byte[] buffer = new byte[1024];//  while (true) {int lengths = 0;lengths=  fis.read(buffer);while (lengths != -1) {toClient.write(buffer, 0, lengths);lengths=fis.read(buffer);}// }// response.setContentType("application/vnd.ms-excel;charset=utf-8");// toClient.flush();} catch (Exception e) {e.printStackTrace();} finally {try {if (toClient != null) {toClient.close();}} catch (IOException e) {e.printStackTrace();}try {if (fis != null) {fis.close();}} catch (IOException e) {e.printStackTrace();}System.out.print("结束上传!准备写入日志文件!");LogUtil.saveLog("uoloadFile", "下载文件:" + mtrbmodel.getFileName(), trainFileService);}}

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

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

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

  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文件批量下载

    /** * 批量下载控制 * @param response * @param request */ @RequestMapping(value = "/file/batDownload&q ...

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

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

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

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

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

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

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

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

最新文章

  1. CSS之定位(固定定位)
  2. 怎样用ug画铝型材_用UG画钻头,适合初学UG的小伙伴,快来学习吧!
  3. Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.
  4. t分布表精确完整图_如何快速绘制临床论文基线特征表
  5. SynchronousQueueE简介
  6. nand flash驱动编写步骤
  7. 使用ffmpeg步骤
  8. Atitit。sql2016标准化的规划方案 v3 q2a
  9. Happy New Year!PR升3啦!
  10. 【量化笔记】股票收益率与风险计算
  11. 新版眼保健操图解(转)
  12. win10系统同时设置静态IP和动态IP
  13. 杭州天目山路招PHP,杭州地铁3号线汽车西站站开始主体施工 天目山路部分路面要开挖了...
  14. 火星特约 | Uniswap的UNI对DEX格局的影响
  15. tp接入富友协议支付
  16. php微信模版消息中发送emoji表情
  17. 微软图形控件(Chart或MSchart)的用法
  18. Python批量跑Hive数据到本地目录
  19. 文献精读-PSEP-生物质和PE塑料的共热解MD以及DFT模拟
  20. 关于intel产品(2)

热门文章

  1. android 抽奖动画下载,召唤抽奖系统正式版
  2. 康奈尔大学计算机科学与工程,康奈尔大学的计算机专业介绍
  3. 视频教程-C++编程FFMpeg(QT5+OpenCV)实战--实时美颜直播推流-C/C++
  4. 学习笔记(14):C++编程FFMpeg(QT5+OpenCV)实战--实时美颜直播推流-打开rtmp推流输出并从文件读取音视频帧...
  5. Python实现多层感知器MLP(基于双月数据集)
  6. 旅人随笔[02] 量子物理的故事
  7. 计算机系统故障如何处理,安装操作系统出错怎么办?几种常见的异常处理方法介绍(图文)...
  8. 网页中的动漫人物互动——看板娘
  9. 关闭win10任务视图功能
  10. 浅谈社交行业风控如何做以及黑产危害