java文件批量下载打包成zip
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相关推荐
- 多文件批量下载打包成.zip
多文件批量下载打包成.zip //下载文件打包成zip压缩包@GetMapping("/zip/{id}")public void zip(@PathVariable(" ...
- Java实现批量下载(打包成zip)
批量下载 引言 一.前端JS发送下载请求 1.ajax无法发送下载请求 2.js发送下载请求:超链接方式 3.js发送下载请求:拼接Form表单,并提交 二.后台处理 三.结束 引言 批量下载思路,首 ...
- EasyExcel3.0.5 导出多个sheet,批量下载打包成ZIP压缩包
多sheet导出并批量下载附件 前言 源码 代码实现 Controller 接口类 实现类 (重中之重) 实现类重点强调 测试 结语 前言 最近浏览语雀社区官网,里面有一篇 easyexcel 里面 ...
- gin 前端文件打包_远程URL文件批量下载打包的方法
开始 最近代码重构遇到了一个问题,需要把OSS 上的一批图片打包下载 旧服务器的硬盘是直接挂载OSS,所以直接调的Linux系统命令复制打包,所以速度比较快.新服务器重构代码行不通,这样做也不好 查阅 ...
- java文件批量下载
/** * 批量下载控制 * @param response * @param request */ @RequestMapping(value = "/file/batDownload&q ...
- Java实现文件批量下载,打包成zip压缩包
最近在做一个管理系统的项目,需要实现一个功能,就是批量下载文件,并打包成zip压缩包. 前端通过POST请求传来要下载的文件列表,Java代码实现如下: import java.io.Bu ...
- Java将多个文件打包成ZIP并下载
Java将多个文件打包成ZIP并下载 需求是多个文件需要同时打包成zip压缩文件并下载到本地,首先我需要的是知道下载文件的路径.我有一个专门的sys_file_info表,表中有对应的文件路径.业务表 ...
- C# 将服务器文件批量压缩打包下载至本地两种方法(压缩包缓存到服务器下载、压缩包缓存到内存下载)
1.将服务器文件打包下载至本地(压缩包缓存到服务器下载) (1)文件批量压缩成压缩包并缓存到服务器(公共方法) using ICSharpCode.SharpZipLib.Checksums; usi ...
- react——利用jszip实现文件批量下载并打包成zip文件
本文章主要记录利用jszip实现文件批量下载图片,文档.mp3,视频(MP4)等文件,一般而言前端实现下载功能一般都是通过a链,这在下载单个文件的场景很实用,但如果是批量下载很多个文件,同样也可以用a ...
最新文章
- CSS之定位(固定定位)
- 怎样用ug画铝型材_用UG画钻头,适合初学UG的小伙伴,快来学习吧!
- Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'beans'.
- t分布表精确完整图_如何快速绘制临床论文基线特征表
- SynchronousQueueE简介
- nand flash驱动编写步骤
- 使用ffmpeg步骤
- Atitit。sql2016标准化的规划方案 v3 q2a
- Happy New Year!PR升3啦!
- 【量化笔记】股票收益率与风险计算
- 新版眼保健操图解(转)
- win10系统同时设置静态IP和动态IP
- 杭州天目山路招PHP,杭州地铁3号线汽车西站站开始主体施工 天目山路部分路面要开挖了...
- 火星特约 | Uniswap的UNI对DEX格局的影响
- tp接入富友协议支付
- php微信模版消息中发送emoji表情
- 微软图形控件(Chart或MSchart)的用法
- Python批量跑Hive数据到本地目录
- 文献精读-PSEP-生物质和PE塑料的共热解MD以及DFT模拟
- 关于intel产品(2)
热门文章
- android 抽奖动画下载,召唤抽奖系统正式版
- 康奈尔大学计算机科学与工程,康奈尔大学的计算机专业介绍
- 视频教程-C++编程FFMpeg(QT5+OpenCV)实战--实时美颜直播推流-C/C++
- 学习笔记(14):C++编程FFMpeg(QT5+OpenCV)实战--实时美颜直播推流-打开rtmp推流输出并从文件读取音视频帧...
- Python实现多层感知器MLP(基于双月数据集)
- 旅人随笔[02] 量子物理的故事
- 计算机系统故障如何处理,安装操作系统出错怎么办?几种常见的异常处理方法介绍(图文)...
- 网页中的动漫人物互动——看板娘
- 关闭win10任务视图功能
- 浅谈社交行业风控如何做以及黑产危害