java下载文件(多个文件进行打包下载)
最近遇到需求要下载材料清单的附件,一个清单下面可能存在多个文件,只存在一个附件直接下载该附件,如果存在多个附件将所有附件打包压缩之后下载压缩包,记录下文件下载以及文件压缩的处理
public void downLoadMaterialFile(HttpServletResponse response) throws Exception {//获取附件路径(数据库获取)ArrayList<String> filePathList = new ArrayList<>();if(filePathList.size() == 1){//只存在一个附件时直接下载对应附件File file = new File(filePathList.get(0));if(!file.exists()){throw new Exception("文件不存在");}//输出文件流writeFileToRes(response, file.getName(), file);}else if(filePathList.size() > 1){//压缩包名称(会拼上当前时间)String datumName = "压缩包名称";//压缩文件File file = compressedFileToZip(datumName, filePathList);//输出文件流writeFileToRes(response, file.getName(), file);//删除压缩包if(file.exists()){file.delete();}}
}/**
* 压缩文件
* @param datumName 压缩包名称
* @param filePathList 附件路径
* @return File
* @throws Exception Exception
*/
private File compressedFileToZip(String datumName, List<String> filePathList) throws Exception {//压缩包具体名称(拼接时间戳防止重名)String zipFileName = datumName + "-" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".zip";//生成压缩包存储地址(最后会删掉)String fileZip = "D:/" + zipFileName;OutputStream os=null;ZipOutputStream zos = null ;File file = new File(fileZip);try {if (!file.getParentFile().exists()) {file.getParentFile().mkdirs();}os=new FileOutputStream(file);//压缩文件zos = new ZipOutputStream(os);byte[] buf = new byte[1024];for (String filePath : filePathList) {File tempFile = new File(filePath);//在压缩包中添加文件夹//zos.putNextEntry(new ZipEntry("测试/"+tempFile.getName()));//直接在压缩包中添加文件zos.putNextEntry(new ZipEntry(tempFile.getName()));int len;FileInputStream in = new FileInputStream(tempFile);while ((len = in.read(buf)) != -1){zos.write(buf, 0, len);}zos.closeEntry();in.close();}} catch (Exception e) {e.printStackTrace();logger.info(e.toString());throw new Exception("文件打包:"+e.getMessage());}finally {//关闭流if(zos != null){try {zos.close();} catch (IOException e) {e.printStackTrace();}}//关闭流if(os!= null){try {os.close();} catch (IOException e) {e.printStackTrace();}}}return file;
}/*** 输出文件流到response* @param response response* @param fileName fileName* @param file file* @throws IOException IOException*/
private void writeFileToRes(HttpServletResponse response, String fileName, File file) throws IOException {FileInputStream inputStream = new FileInputStream(file);//1.设置文件ContentType类型,这样设置,会自动判断下载文件类型response.setContentType("application/octet-stream");//2.设置文件头:最后一个参数是设置下载文件名response.addHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));response.addHeader("Content-Length", "" + file.length());//3.通过response获取ServletOutputStream对象(out)ServletOutputStream out = response.getOutputStream();int b = 0;byte[] buffer = new byte[1024];while (b != -1) {b = inputStream.read(buffer);//4.写到输出流(out)中out.write(buffer, 0, b);}out.flush();out.close();inputStream.close();}
转载于:https://www.ycblog.top/article?articleId=138&commentPageNum=1
java下载文件(多个文件进行打包下载)相关推荐
- java基础入门txt下载地址_java基础入门-ZipOutputStream打包下载
今天跟大家聊聊使用ZipOutputStream打包下载,我下面是使用ant的jar打包的,因为他对应中文的支持比较好 大家也可以使用java.util.zip包里面的工具类打包,但是他对于中文不友好 ...
- php 打包下载网络图片,PHP实现图片批量打包下载功能
上次遇到一个需要打包下载批量图片的问题,找了一下发现这个好方法,记录一下. 首先新建一个zipfile打包类: class zipfile { var $datasec = array (); var ...
- vue实现前台生成word并下载,并且可实现批量打包下载
一.引用场景: 前面的一个项目里面有一个申报表,后台收集的申报表需要批量导出,一开始我是用到的C#的WordOpApControlle,但是这种方法存在一个难以解决的问题.就是当你导出的这个word模 ...
- 【jQuery】jQuery与vue实现点击下载图片 以及js实现批量打包下载图片
原理:用canvas的toDataUrl() API获取到图片的base64编码,再利用触发a标签事件进行下载.(单张图片下载) 多张图片批量下载导出压缩包需要引入jsZip jQuery实现点击下载 ...
- java动态生成excel_java动态生成excel打包下载
@SuppressWarnings("unchecked")public String batchExport() throwsDBException{ @SuppressWarn ...
- java文件下载功能代码(单文件下载、多文件批量打包下载)——普遍适用
一.前言 程序员在做web等项目的时候,往往都需要添加文件上传.下载.删除的功能,有时是单文件,有时多文件批量 操作,而这些功能的代码程序员可以自己收藏起来当成工具使用,这样,程序员在进行程序设计 ...
- Springboot 从华为云OBS中打包下载文件到本地
文章目录 前言 一.OBS是什么? 二.使用步骤 1.引入依赖 2.获取obs中的一些参数:endPoint,ak,sk还有桶名(重要,必须要有). 3.开始下载 4.设置out流的打包下载 总结 前 ...
- 浏览器中利用js打包下载所有类型文件
浏览器中利用js打包下载所有类型文件 概述 ajax请求方式打包下载所有类型文件 canvas渲染方式打包下载所有图片 相关知识 作者 概述 需求:1.项目中在浏览器中点击按钮后根据多个url地址下载 ...
- JavaScript实战篇 -ajax方式实现js打包下载文件
一.问题描述 在我们日常开发中,会遇到批量下载方面的问题;如上图所示,我们要批量下载图片,接下来我们就模拟实现这个功能,并将下载文件打包下载; 二.准备工作 2.1 JSZip JSZip 是一个 j ...
- java生成图片url_Java Springboot如何基于图片生成下载链接
现有一些图片在服务器上的链接,在浏览器中打开这些链接是直接显示在浏览器页面的形式. 现在需要生成这些图片的单独下载以及打包下载链接,即在浏览器中打开下载链接后弹出下载框提示下载.由于前端存在跨域问题, ...
最新文章
- Nature:如何做一篇肠道菌群免疫的顶级文章
- R语言ggplot2可视化分面图使用facet_wrap函数和facet_grid函数实战
- R语言可视化韦恩图实战:VENN DIAGRAM
- .svn文件夹_新建SVN仓库并上传项目
- AD9910高速集成DDS芯片(verilog篇-串行模式篇-22个寄存器SPI通信周期控制)
- poj3061尺取法/前缀和 二分(java)
- HTML5 Web Worker
- Hibernate type 与java 和 数据库类型对应
- mysql 整数_MySQL 整数(int)数据类型
- 动态改变ListView布局
- Visual Studio 2005 移植 (札记之一)
- Excel文件处理实战-Python编程进阶
- 再次理解HTTP请求过程[概念原理篇]
- python颜色识别_OpenCV(Python)学习之识别图片特定颜色
- 泵引理 Pumping Lemma
- Swarm管理分布式docker
- 央企建筑施工企业职工教育培训数字化解决方案
- android 8.1 蓝牙打不开之CLOCK_BOOTTIME_ALARM问题
- vc++拾遗(7)-框架、视图、文档
- 进入紧急救援模式下更改管理员密码