java+文件批量下载
这篇文章主要介绍了Java实现批量下载选中文件功能,非常不错,具有参考借鉴价值,需要的朋友可以参考下
1.在action中定义变量
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. 主方法
/**
* 下载多个文件:压缩成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中配置
<action name="downLoadBkPersonLessionsZip" class="bkPersonLessionAction"
method="downLoadLessionsZip">//class值为bean.xml中配置的bean
<result name="nodata" type="httpheader">
<param name="status">204</param>//表示响应执行成功,但没有数据返回,浏览器不用刷新,不用导向新页面
</result>
</action>
总结
以上所述是小编给大家介绍的Java实现批量下载选中文件功能,希望对大家有所帮助,如果大家有任何疑问请给我留言
详细的代码及配置信息可以参考我写的这篇文章:
http://blog.ncmem.com/wordpress/2019/08/28/java%e6%89%b9%e9%87%8f%e4%b8%8b%e8%bd%bd/
java+文件批量下载的更多相关文章
- Jsp实现筛选并压缩文件批量下载
Jsp实现筛选并压缩文件批量下载 首先明确一下需求,网页端点击一下button,传递特定的参数到download.jsp网页,筛选文件,对过滤得到的文件进行压缩,然后返回前端一个压缩包下载. 以下的代 ...
- C#子线程中更新ui-----c# 多线程多文件批量下载
c# 多线程多文件批量下载 废话少说,先演示一张效果图 简单说下过程喽 开发过程中其实总是会碰到项目想应用下载文件~ 看其他语言有很多封装好的类库可以使用~~ 作为小白的我并没有找到很多c#的案例 ...
- SQL 横转竖 、竖专横 (转载) 使用Dapper.Contrib 开发.net core程序,兼容多种数据库 C# 读取PDF多级书签 Json.net日期格式化设置 ASPNET 下载共享文件 ASPNET 文件批量下载 递归,循环,尾递归 利用IDisposable接口构建包含非托管资源对象 《.NET 进阶指南》读书笔记2------定义不可改变类型
SQL 横转竖 .竖专横 (转载) 普通行列转换 问题:假设有张学生成绩表(tb)如下: 姓名 课程 分数 张三 语文 74 张三 数学 83 张三 物理 93 李四 语文 74 李四 数学 84 ...
- js 实现多文件批量下载
关于兼容性问题: <a href="xxx.docx" target='_blank'></a> 下载文件时,这种写法是没有兼容性问题:但是下载图片时,IE ...
- java/resteasy批量下载存储在阿里云OSS上的文件,并打包压缩
现在需要从oss上面批量下载文件并压缩打包,搜了很多相关博客,均是缺胳膊少腿,要么是和官网说法不一,要么就压缩包工具类不给出 官方API https://help.aliyun.com/documen ...
- java多线程批量下载文件
多线程下载文件 平时开发中有时会用到文件下载,为了提高文件的下载速率,采用多线程下载能够达到事半功倍的效果: package test; /** * 文件下载类 * @author luweichen ...
- Java实现批量下载选中文件功能
1.在action中定义变量 ? 1 2 3 4 5 6 private List<String> downLoadPaths = new ArrayList<String>( ...
- R语言之RCurl实现文件批量下载
前言: RCurl工具包的作者是由Duncan Temple Lang现任加州大学 U.C. Davis分校副教授.他曾致力于借助统计整合进行信息技术的探索.使用者通过RCurl可以轻易访问网页,进行 ...
- Java实现批量下载《神秘的程序员》漫画
上周看了西乔的博客“西乔的九卦”.<神秘的程序员们>系列漫画感觉很喜欢,很搞笑.这些漫画经常出现在CSDN“程序员”杂志末页的,以前也看过一些. 后来就想下载下来,但是一张一张的点击右键“ ...
随机推荐
- java进程CPU高分析
JVM导致系统CPU高的常见场景: 内存不足,JVM gc频繁,一般会伴随OOMJVM某个线程死循环或者递归调用 定位和解决1.内存不足,gc频繁可参考我的这遍文章解决.https://blog.cs ...
- Codeforces1263D-Secret Passwords
题意 给n个字符串,两个字符串之间如果有相同的字符,那么两个就等价,等价关系可以传递,问最后有多少个等价类. 分析 考虑并查集或者dfs联通块,如果是并查集的话,对于当前字符串的某个字符,肯定要和这个 ...
- 区间dp 整数划分问题
整数划分(四) 时间限制:1000 ms | 内存限制:65535 KB 难度:3 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近 ...
- nodes.js详细安装
nodes.js详细安装 Node.js 本章节我们将向大家介绍在window和Linux上安装Node.js的方法. 本安装教程以Node.js v4.4.3 LTS(长期支持版本)版本为例. No ...
- vue打包后css背景图片地址找不到
背景图片变成了这样:static/css/static/imgs/xxx.jpg 解决方法,修改build/utils,添加 publicPath: '../../' 就行 对比了下,com ...
- nginx之健康检查
正常情况下,nginx做反向代理,如果后端节点服务器宕掉的话,nginx默认是不能把这台realserver踢出upstream负载集群的,所以还会有请求转发到后端的这台realserver上面,这样 ...
- Plugin 表格列自定义显示隐藏插件TableCustom.js
TableCustom 案例展示 下载地址 https://github.com/chaorenzeng/TableCustom.js.git 快速使用 1.引入TableCustom.css和Tab ...
- hourglassnet网络解析
hourglassnet中文名称是沙漏网络,起初用于人体关键点检测,代码,https://github.com/bearpaw/pytorch-pose 后来被广泛的应用到其他领域,我知道的有双目深度 ...
- Delphi ActiveX编程
樊伟胜
- 第二章· MySQL体系结构管理
一.客户端与服务器模型  1.mysql是一个典型的C/S服务结构 1.1 mysql自带的客户端程序(/application/mysql/bin) mysql mysqladmin mysqld ...