JAVA HTML 以压缩包下载多文件
<form id ="submitForm" method="post">
</form>
JS:
var arr=多个文件的文件名以逗号隔开;
$("#submitForm").attr("action","<%=request.getContextPath()%>/Pe03/toDownLoad?ape505="+arr);
$("#submitForm").submit();
java:
//下载附件
@SystemControllerLog(description="下载附件")
@RequestMapping("/toDownLoad")
@ResponseBody
public void downPrintLodopFile(String [] ape505,HttpServletRequest request, HttpServletResponse response) throws Exception{
//获得文件路径
String realPath = request.getSession().getServletContext().getRealPath("/upload/预警处理模块上传目录/");
for(int i=0;i<ape505.length-1;i++){
ape505[i]=realPath+ape505[i];
}
//执行down
down(realPath, ape505, request, response);
}
public void down(String path, String[] files, HttpServletRequest request, HttpServletResponse response) throws Exception {
// path 压缩文件初始设置
// 拼接zip文件,之后下载下来的压缩文件的名字
String base_name = "附件";
String fileZip = base_name + ".zip";
// 之后用来生成zip文件
String filePath = path + fileZip; // 创建临时压缩文件
try {
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(filePath));
ZipOutputStream zos = new ZipOutputStream(bos);
ZipEntry ze = null;
// 将所有需要下载的文件都写入临时zip文件
for (int i = 0; i < files.length-1; i++) {
BufferedInputStream bis = new BufferedInputStream(
new FileInputStream(files[i]));
ze = new ZipEntry(
files[i].substring(files[i].lastIndexOf("\\")));
zos.putNextEntry(ze);
int s = -1;
while ((s = bis.read()) != -1) {
zos.write(s);
}
bis.close();
}
zos.flush();
zos.close();
} catch (IOException e) {
e.printStackTrace();
}
// 以上,临时压缩文件创建完成 // 进行浏览器下载
// 获得浏览器代理信息
String agent = request.getHeader("User-Agent").toUpperCase();
// 判断浏览器代理并分别设置响应给浏览器的编码格式
String finalFileName = null;
if ((agent.indexOf("MSIE") > 0)
|| ((agent.indexOf("RV") != -1) && (agent.indexOf("FIREFOX") == -1)))
finalFileName = URLEncoder.encode(fileZip, "UTF-8");
else {
finalFileName = new String(fileZip.getBytes("UTF-8"), "ISO8859-1");
}
// 告知浏览器下载文件,而不是直接打开,浏览器默认为打开
response.setContentType("application/x-download");
response.setHeader("Content-Disposition", "attachment;filename=\""
+ finalFileName + "\"");// 下载文件的名称
//输出到本地
ServletOutputStream servletOutputStream = response.getOutputStream();
DataOutputStream temps = new DataOutputStream(servletOutputStream); // 浏览器下载临时文件的路径
DataInputStream in = new DataInputStream(new FileInputStream(filePath));
byte[] b = new byte[2048];
// 之后用来删除临时压缩文件
File reportZip = new File(filePath);
try {
while ((in.read(b)) != -1) {
temps.write(b);
}
temps.flush();
} catch (Exception e) {
e.printStackTrace();
} finally {
if (temps != null) {
temps.close();
}
if (in != null) {
in.close();
}
// 删除服务器本地产生的临时压缩文件
if (reportZip != null){
reportZip.delete();
}
servletOutputStream.close();
}
}
JAVA HTML 以压缩包下载多文件的更多相关文章
- JAVA 解压压缩包中指定文件或实现压缩文件的预览及下载单个或多个指定的文件
业务逻辑中还要判读用户是否有此文件的防问权限 2017-04-20 新增文件与文件夹图标显示及过滤高亮显示功能: 2017-05-20 新增搜索向前及向后.及更新下载功能.更新文件路径显示: 测试地址 ...
- java FTP 上传下载删除文件
在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件 ...
- JAVA web端JS下载excel文件
JSP代码如下: JSP端引入jquery.easyui.min.js库: <script type="text/javascript" src="<c:ur ...
- Java解压和压缩带密码的zip或rar文件(下载压缩文件中的选中文件、向压缩文件中新增、删除文件)
JAVA 实现在线浏览管理zip和rar的工具类 (有密码及无密码的)以及下载压缩文件中的选中文件(向压缩文件中新增.删除文件) 这是之前的版本 JAVA 解压压缩包中指定文件或实现压缩文件的预览及下 ...
- Java浏览器弹出下载框,多个文件导出压缩包
项目里一直有这个功能,也一直没怎么注意,今天研究了一下 依据逻辑往下走: 首先是要下载的ajax的Java方法,只有返回值需要设定一下,其他的不用管: Map<String, Object> ...
- JAVA代码实现下载单个文件,和下载打包文件
//下载单个文件调用方法 /** * response * imgPath 下载图片地址 * fileName 保存下载文件名称 * @date 2015年4月14日 下午 ...
- JAVA多线程下载网络文件
JAVA多线程下载网络文件,开启多个线程,同时下载网络文件. 源码如下:(点击下载 MultiThreadDownload.java) import java.io.InputStream; im ...
- java 通过sftp服务器上传下载删除文件
最近做了一个sftp服务器文件下载的功能,mark一下: 首先是一个SftpClientUtil 类,封装了对sftp服务器文件上传.下载.删除的方法 import java.io.File; imp ...
- php 通过header下载中文文件名 压缩包损坏或文件不存在的问题
开发中大家都是使用的utf8编码,昨天遇到一个奇坑,本是一件很小的问题,解决也浪费了个吧小时.废话不多说,植入正题: 文件下载方式:通过header二进制流文件下载需求: 文件上传保留文件名不变数据字 ...
随机推荐
- 题解 SP687 【REPEATS - Repeats】
考虑可以枚举字符串上的两个点,求出两个点所对应后缀的\(LCP\)和所对应前缀的\(LCS\),两点之间的距离为\(len\),则这两个点对答案的贡献为: \[ \frac{LCS+LCP+L-1}{ ...
- grpc 之 word2pdf使用
做一个word转pdf的服务,采用grpc,使用libreoffice命令. 1.构建libreoffice镜像 FROM python:3.6 ENV TZ=Asia/Shanghai RUN ...
- 玩LOL间歇性卡顿(FPS突然降低又马上恢复)?Windows10间歇性卡顿?
一..问题描述: LOL时:画面突然死掉,不能操作:FPS突然降低,从三位数降到两位数(150 -> 6).我最开始就是从LOL这里观测到的,因为游戏是卡顿最直观.最明显的表现.之后才发现不玩游 ...
- 数据库(十三):MySQL内置方法
进击のpython ***** 数据库--MySQL内置方法 目录 数据库--MySQL内置方法 视图 增加 修改 删除 触发器 创建 使用 删除 存储过程 无参 有参 事务 代码实现 视图 视图是一 ...
- PHP array_shift() 函数
实例 删除数组中的第一个元素(red),并返回被删除的元素: <?php $a=array("a"=>"red","b"=> ...
- PHP vfprintf() 函数
实例 把一些文本写入到名为 "test.txt" 的文本文件: <?php高佣联盟 www.cgewang.com$number = 9;$str = "Beiji ...
- Skill 中的通用输出格式规范
https://www.cnblogs.com/yeungchie/ Skill中的通用输出格式规范 Common Output Format Specifications Format Specif ...
- kubernetes ingress 重定向地址错误
环境: 有两个 kubernetes 集群: 一个版本为1.11,后面使用A集群代替,ingress 镜像版本为 0.19(quay.io/kubernetes-ingress-controller/ ...
- python2.4项目:快递计价程序
#开发一个快递计价程序3kg以内:东三省.宁夏.海南.12元:新疆.西藏20元:港澳台.国外:不接受:其他10元.超过3kg的部分:东三省.宁夏.海南每公斤10元:新疆.西藏每公斤20元:港澳台.国外 ...
- 如何查看Docker容器环境变量,如何向容器传递环境变量
1 前言 欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章! 了解Docker容器的运行环境非常重要,我们把应用放在容器里执行,环境变量会直接影响程序的执行效果.所以我们要知道容器内部的 ...