Java实现批量下载选中文件功能
1.在action中定义变量
1
2
3
4
5
6
|
private List<String> downLoadPaths = new ArrayList<String>(); //存储选中文件的下载地址 private OutputStream res; private ZipOutputStream zos; private String outPath; private String lessionIdStr; // 选中文件ID拼接的字符串 private String fileName; //浏览器下载弹出框中显示的文件名 |
分别给出get和set方法
2. 主方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
/** * 下载多个文件:压缩成zip * * @return * @throws Exception */ public String downLoadLessionsZip() { downLoadPaths.clear(); String firstFileName = "" ; // 第一个文件的文件名 List<DownLoadFileVo> fileVos = new LinkedList<DownLoadFileVo>(); if (StringUtils.isNotEmpty(lessionIdStr)) { int end = lessionIdStr.lastIndexOf( "," ); if (end > 0 ) { if (end == lessionIdStr.length() - 1 ) { lessionIdStr = lessionIdStr.substring( 0 , end); } String[] ids = lessionIdStr.split( "," ); for ( int i = 0 ; i < ids.length; i++) { if (StringUtils.isNumeric(ids[i])) { BkPersonLession lession = bkPersonLessionService.downLoadLession(Integer.parseInt(ids[i])); if (lession != null ) { fileVos.add( new DownLoadFileVo(lession .getLessionName(), getContextRealPath() + lession.getLessionSavePath())); downLoadPaths.add(getContextRealPath() + lession.getLessionSavePath()); } if (i == 0 ) { firstFileName = lession.getLessionName(); } } } } } // 有数据可以下载 if (downLoadPaths.size() != 0 ) { // 进行预处理 preProcess(firstFileName); } else { // 没有文件可以下载,返回nodata return "nodata" ; } // 处理 writeZip(fileVos); // 后处理关闭流 afterProcess(); return null ; } // 压缩处理 public void writeZip(List<DownLoadFileVo> fileVos) { byte [] buf = new byte [ 8192 ]; int len; for (DownLoadFileVo fileVo : fileVos) { File file = new File(fileVo.getFileSavePath()); if (!file.isFile()) continue ; ZipEntry ze = new ZipEntry(fileVo.getFileName() + fileVo.getFileSavePath().substring( fileVo.getFileSavePath().lastIndexOf( "." ))); try { 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(); } catch (IOException e) { e.printStackTrace(); } } } // 预处理 public void preProcess(String firseFileName) { String zipName = "【批量下载】" + firseFileName + "等.zip" ; String filename = "" ; try { filename = new String(zipName.getBytes( "GBK" ), "8859_1" ); } catch (UnsupportedEncodingException e1) { e1.printStackTrace(); } this .fileName = filename; HttpServletResponse response = ServletActionContext.getResponse(); try { res = response.getOutputStream(); // 清空输出流(在迅雷下载不会出现一长窜) response.reset(); // 设定输出文件头 response.setHeader( "Content-Disposition" , "attachment;fileName=" + filename); response.setContentType( "application/zip" ); zos = new ZipOutputStream(res); } catch (IOException e) { e.printStackTrace(); } } // 后处理 public void afterProcess() { try { if (zos != null ) { zos.close(); } if (res != null ) { res.close(); } } catch (IOException e) { e.printStackTrace(); } } |
3. 在struts.xml中配置
1
2
3
4
5
6
|
<action name= "downLoadBkPersonLessionsZip" class = "bkPersonLessionAction" method= "downLoadLessionsZip" > //class值为bean.xml中配置的bean <result name= "nodata" type= "httpheader" > <param name= "status" > 204 </param> //表示响应执行成功,但没有数据返回,浏览器不用刷新,不用导向新页面 </result> </action> |
DEMO下载地址:https://dwz.cn/Jw3z6fVq
Java实现批量下载选中文件功能的更多相关文章
- Java读取并下载网络文件
CreateTime--2017年8月21日10:11:07 Author:Marydon import java.io.ByteArrayOutputStream; import java.io ...
- Python3 根据m3u8下载视频,批量下载ts文件并且合并
Python3 根据m3u8下载视频,批量下载ts文件并且合并 m3u8是苹果公司推出一种视频播放标准,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少 ...
- java实现批量修改指定文件夹下所有后缀名的文件为另外后缀名的代码
java实现批量修改指定文件夹下所有后缀名的文件为另外后缀名的代码 作者:Vashon package com.ywx.batchrename; import java.io.File; import ...
- Aras Innovator客户端批量下载关联文件
<button onclick="btnDownload();" id="downfilebtn">批量下载关联文件</button> ...
- java/resteasy批量下载存储在阿里云OSS上的文件,并打包压缩
现在需要从oss上面批量下载文件并压缩打包,搜了很多相关博客,均是缺胳膊少腿,要么是和官网说法不一,要么就压缩包工具类不给出 官方API https://help.aliyun.com/documen ...
- java+web+批量下载文件
JavaWeb 文件下载功能 文件下载的实质就是文件拷贝,将文件从服务器端拷贝到浏览器端,所以文件下载需要IO技术将服务器端的文件读取到,然后写到response缓冲区中,然后再下载到个人客户端. 1 ...
- java多线程批量下载文件
多线程下载文件 平时开发中有时会用到文件下载,为了提高文件的下载速率,采用多线程下载能够达到事半功倍的效果: package test; /** * 文件下载类 * @author luweichen ...
- Java实现批量下载《神秘的程序员》漫画
上周看了西乔的博客“西乔的九卦”.<神秘的程序员们>系列漫画感觉很喜欢,很搞笑.这些漫画经常出现在CSDN“程序员”杂志末页的,以前也看过一些. 后来就想下载下来,但是一张一张的点击右键“ ...
- 【数据下载】利用wget命令批量下载ftp文件和文件夹
这是一个“”数据大发现”的时代,大家都在创造数据,使用数据以及分享数据,首先一步我们就需要从数据库download我们需要的数据. Ftp是一种常见的在线数据库,今天介绍一种可以批量下载文件夹的方法, ...
随机推荐
- Linux计划任务与压缩归档
计划任务分为两种形式 第一种:定时性的:也就是例行,每隔一定的周期就要重复来做这个任务. 第二种:突发性的:临时决定,只执行一次的任务. 用到的命令有两个 at:它是一个可以处理仅执行一次的任务就结束 ...
- Android异常与性能优化相关面试问题-其他优化面试问题详解
Android不用静态变量存储数据: 静态变量等数据由于进程已经被杀死而被初始化.在Android中应用进程不是安全的,因为它会有系统给kill掉,但是在实际中可能会有这样的一个假象:当app被杀掉之 ...
- Mybatis mapper.xml 配置
<!-- xml的标准格式 --><?xml version="1.0" encoding="UTF-8" ?><!DOCTYPE ...
- regex正则
1 正则表达式基本语法 两个特殊的符号^和$.他们的作用是分别指出一个字符串的开始和结束.例子如下: ^The:表示所有以”The”开始的字符串(”There”,”The cat”等): of des ...
- jar包上传本地maven仓库
执行mvn install:install-file -Dfile=D:\software\jave-1.0.2\jave-1.0.2\jave-1.0.2.jar -DgroupId=it.saur ...
- union不支持orderByClause、clusterByClause、distributeByClause、sortByClause或limitClause
union all union 相同点 是 相当于上下拼接 上下两个拼接表必须字段保持一致 不同 union有去重效果,速度会更慢. ================================= ...
- 题解 【NOIP2011】计算系数
[NOIP2011]计算系数 Description 给定一个多项式 (ax+by)^k ,请求出多项式展开后 x^n * y^m 项的系数. Input 共一行,包含 5 个整数,分别为 a,b,k ...
- 2019 Red PCB KESS V5.017:支持140协议
2019红色PCB KESS V5.017 是一种流行的汽车ECU的编程器.这里分享一下这个设备的信息. KESS V2介绍: 型号名称:KESS V2 Master软件版本:V2.47(最新)固件版 ...
- 【Python之路】特别篇--Celery
Celery介绍和基本使用 Celery 是一个分布式异步消息队列,通过它可以轻松的实现任务的异步处理 举几个实例场景中可用的例子: 你想对100台机器执行一条批量命令,可能会花很长时间 ,但你不想让 ...
- springboot读取配置信息、环境变量
2.读取配置文件 2.1 读取核心配置文件 核心配置文件是指在resources根目录下的application.properties或application.yml配置文件,读取这两个配置文件的方法 ...