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是一种常见的在线数据库,今天介绍一种可以批量下载文件夹的方法, ...
随机推荐
- 离线(不联网)安装gcc4.8.5
1 楔子 原来机器gcc版本是4.4.6,不支持cpp11,很麻烦需要升级,但是机器不能连外网,只能离线安装,十分麻烦: 2 gcc4.8.5离线安装,通过rpm包: 资源链接: https://pa ...
- Redis07-Redis单节点容量问题,twemproxy,predixy的使用
Redis单节点容量问题 一.单节点容量问题 我们在实际场景中,往往遇上一个单节点容量问题. 1.进行业务拆分,数据分类 2.到了数据不能拆分的时候,可以进行数据分片 进行哈希取模(影响分布式下的扩展 ...
- sql like 拼接字符串模糊查询
这种分割的值大家常用,如果要用like 来查询包含2,这个值的数据有哪些,这个怎么查? like '%2%' ????,这是不行的如果是 44,125,687 同样可以查出来,那么就想到通配符, l ...
- QTP(8)
一.Action 1.调用Action C:\Program Files\HP\QuickTest Professional\CodeSamplesPlus\Flight_Samples (1)调用A ...
- Matrix Factorization in RecSys
矩阵分解在推荐系统中的应用. 参考链接:知乎. 传统SVD,Funk-SVD,Bias-SVD,SVD++. SVD奇异值分解及其意义. 漫谈奇异值分解.
- BZOJ 1001 平面图转对偶图
原图的面转成点,原图的边依旧边,只是连接的是两个面. 对偶图的点数=原图的面数 对偶图的边数=原图的边数(如果原边只属于一个面,则它为环边) #include<bits/stdc++.h> ...
- oracle 中从一个历史表中查询最新日期数据插入到另一个表中语句
先从历史表中查询最新的一个语句: select t.id from ( select r.*, row_number() over(partition by r.分组字段 order by r.排序时 ...
- vue组件开发练习--焦点图切换
1.前言 vue用了有一段时间了,开发的后台管理系统也趋于完善,现在时间比较算是有点空闲吧!这个空闲时间我在研究vue的另外的一些玩法,比如组件,插件等.今天,我就分享一个组件的练手项目--焦点图切换 ...
- substring和substr的区别
substring和subsrt都是获取指定位数 字符串的方法: 语法: substring(start,end)/substring(one); substr(start,end)/substr(o ...
- vue 创建项目 create和init
vue init是vue-cli2.x的初始化方式,可以使用github上面的一些模板来初始化项目,webpack是官方推荐的标准模板名. 示例:vue init webpack myproject ...