批量下载多个文件,把它们压缩成压缩包的方式下载
来源:互联网 发布:zblogasp转php 编辑:程序博客网 时间:2024/05/16 10:12
public void batchDownload(HttpServletResponse response, Integer[] id) { //判断是否是一个,,如果是则单个下载方式下载 if (historyTaskIds.length == 1) { //单个下载的方法就不放出来啦 //download(response, id[0]); } else { List<Message> list = new ArrayList<Message>(); for (int historyTaskId : historyTaskIds) { //通过ID查询数据库得到MixerTaskHistory表数据 MixerTaskHistory mixerTaskHistory = mixerTaskHistoryDAO.findMixerTaskHistoryById(id); //得到要下载的文件的路径 String renderPath = mixerTaskHistory.getRenderPath(); String renderName = null; //下载文件命名 if (mixerTaskHistory.getOutType() == 1) {//1为视频 renderName = mixerTaskHistory.getRenderName() + ".mp4"; } if (mixerTaskHistory.getOutType() == 2) {//2为图片 renderName = mixerTaskHistory.getRenderName() + ".png"; } File file = new File(renderPath); if (!file.exists()) { throw new MyException("资源不存在,不能下载"); } else { Message message = new Message(); message.setPath(renderPath);//文件路径 message.setMessage(renderName);//文件名字 list.add(message); } } //通过UUID随机生成一个zip文件名 String uuid = UUID.randomUUID().toString(); String fileName = uuid + ".zip"; String zipName = "D:/mixer/zip/"+fileName; File zipFile = new File(zipName); try { if (!zipFile.exists()) { zipFile.createNewFile(); } } catch (Exception e) { e.printStackTrace(); logger.error("zip压缩包创建出错"); } CompressZipUtil compressZipUtil = new CompressZipUtil(); //压缩文件 boolean flag = compressZipUtil.writeZip(list,zipName); if(flag){ //下载文件 download(response,fileName,zipFile); }else { logger.error("压缩文件出现错误"); } }}//下载方法private void download(HttpServletResponse response, String fileName, File file) { response.reset(); response.setCharacterEncoding("utf-8"); response.setContentType("multipart/form-data"); response.setHeader("Content-Disposition", "attachment;fileName=" + fileName); response.setHeader("Content-Length", String.valueOf(file.length())); //用于记录以完成的下载的数据量,单位是byte InputStream inputStream = null; OutputStream os = null; try { //打开本地文件流 inputStream = new FileInputStream(file); //激活下载操作 os = response.getOutputStream(); //循环写入输出流 byte[] b = new byte[1024 * 1024]; int length; while ((length = inputStream.read(b)) > 0) { os.write(b, 0, length); } } catch (IOException e) { e.printStackTrace(); logger.error("下载出现错误"); } finally { try { if (os != null) { os.close(); } if (inputStream != null) { inputStream.close(); } } catch (IOException e) { e.printStackTrace(); logger.error("关流出现错误"); } }}/** * 压缩文件方法 * @param files 压缩的文件的名字和路径 * @param zipName压缩包的文件路径 * @return */public boolean writeZip(List<Message> files, String zipName){ boolean flag; try { OutputStream os = new BufferedOutputStream(new FileOutputStream(zipName)); ZipOutputStream zos = new ZipOutputStream(os); //设置文件名编码方式 zos.setEncoding("UTF-8"); byte[] buf = new byte[8192]; int len; for (int i=0;i<files.size();i++) { File file = new File(files.get(i).getPath()); if (!file.isFile()) continue; ZipEntry ze = new ZipEntry(files.get(i).getMessage()); //解决linux乱码问题 ze.setUnixMode(644); zos.putNextEntry(ze); BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file)); while ((len = bis.read(buf)) > 0) { zos.write(buf,0, len); } zos.closeEntry(); } zos.closeEntry(); zos.close(); flag = true; }catch (Exception e){ logger.error("压缩文件出现错误"); flag = false; e.printStackTrace(); } return flag;}
阅读全文
0 0
- 批量下载多个文件,把它们压缩成压缩包的方式下载
- 批量下载_Zip压缩包的方式
- 批量下载文件,打包成zip压缩包
- 多个文件压缩下载
- 文件的上传,下载,多个文件生成压缩包,文件的删除
- java-flex 批量下载文件-压缩下载
- php 多文件下载 生成压缩包
- 将文件包压缩下载
- 使用PHP的ZipArchive类实现多个文件的zip压缩包打包下载
- 多表批量导出txt及打压缩包下载
- thinkPHP压缩文件夹下的多个文件并下载
- 在ASP.NET中实现压缩多个文件为.zip文件,实现批量下载功能
- java后台创建压缩包&使用浏览器下载文件(批量下载实现)
- java后台创建压缩包&使用浏览器下载文件(批量下载实现)
- Structs2 json 打包下载文件,多个文件打成一个压缩包
- C#压缩包下载
- java下载压缩包文件zip
- 以压缩包形式下载文件
- Linux的系统文件结构--《Linux就该这么学》
- 用纯JavaScript替代jQuery的技巧
- 《调用opencv库的简单makefile示例》
- jinfo:Java配置信息工具
- 矩阵取数游戏
- 批量下载多个文件,把它们压缩成压缩包的方式下载
- 低功耗蓝牙BLE之连接事件、连接参数和更新方法
- 游戏开发学习笔记(二)创建游戏角色场景的制作
- 博客项目Tale思维导图,让项目不再难懂
- 如何构建优秀的命令行用户界面的 Python 库
- 第十一节、css的进阶:自动处理css3属性前缀
- 用shell脚本合并多个文件内容
- 【Kafka源码】ReplicaManager启动过程
- 使用Socket进行一台服务器与多个Android客户端进行双向通信