Html:
 利用form表单来发送下载请求
<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 以压缩包下载多文件的更多相关文章

  1. JAVA 解压压缩包中指定文件或实现压缩文件的预览及下载单个或多个指定的文件

    业务逻辑中还要判读用户是否有此文件的防问权限 2017-04-20 新增文件与文件夹图标显示及过滤高亮显示功能: 2017-05-20 新增搜索向前及向后.及更新下载功能.更新文件路径显示: 测试地址 ...

  2. java FTP 上传下载删除文件

    在JAVA程序中,经常需要和FTP打交道,比如向FTP服务器上传文件.下载文件,本文简单介绍如何利用jakarta commons中的FTPClient(在commons-net包中)实现上传下载文件 ...

  3. JAVA web端JS下载excel文件

    JSP代码如下: JSP端引入jquery.easyui.min.js库: <script type="text/javascript" src="<c:ur ...

  4. Java解压和压缩带密码的zip或rar文件(下载压缩文件中的选中文件、向压缩文件中新增、删除文件)

    JAVA 实现在线浏览管理zip和rar的工具类 (有密码及无密码的)以及下载压缩文件中的选中文件(向压缩文件中新增.删除文件) 这是之前的版本 JAVA 解压压缩包中指定文件或实现压缩文件的预览及下 ...

  5. Java浏览器弹出下载框,多个文件导出压缩包

    项目里一直有这个功能,也一直没怎么注意,今天研究了一下 依据逻辑往下走: 首先是要下载的ajax的Java方法,只有返回值需要设定一下,其他的不用管: Map<String, Object> ...

  6. JAVA代码实现下载单个文件,和下载打包文件

    //下载单个文件调用方法 /**     * response     * imgPath 下载图片地址    * fileName 保存下载文件名称    * @date 2015年4月14日 下午 ...

  7. JAVA多线程下载网络文件

    JAVA多线程下载网络文件,开启多个线程,同时下载网络文件.   源码如下:(点击下载 MultiThreadDownload.java) import java.io.InputStream; im ...

  8. java 通过sftp服务器上传下载删除文件

    最近做了一个sftp服务器文件下载的功能,mark一下: 首先是一个SftpClientUtil 类,封装了对sftp服务器文件上传.下载.删除的方法 import java.io.File; imp ...

  9. php 通过header下载中文文件名 压缩包损坏或文件不存在的问题

    开发中大家都是使用的utf8编码,昨天遇到一个奇坑,本是一件很小的问题,解决也浪费了个吧小时.废话不多说,植入正题: 文件下载方式:通过header二进制流文件下载需求: 文件上传保留文件名不变数据字 ...

随机推荐

  1. Typora + PicGo + Gitee 实现图片自动上传到图床

    1.下载并安装 Typora (windows版本) https://typora.io/#windows 2.设置图像 文件 -- 偏好设置 -- 图像 3.上步点击下载PicGo(app) 后,去 ...

  2. 2018年5月15日临下班前找的一个读取assets下数据库的例子

    网页   https://blog.csdn.net/li12412414/article/details/51958774 @Override protected void onCreate(Bun ...

  3. 扯扯Java中的锁

    前言 又过去了一个周末,最近陆陆续续的看了<并发编程的艺术>一书,对锁有不少感悟,这次就聊聊Java中的锁事.本文纯粹是漫谈,想到哪说到哪,但准确性肯定会保证,倘若有不正确之处,还请交流指 ...

  4. PHP arsort() 函数

    ------------恢复内容开始------------ 实例 对关联数组按照键值进行降序排序: <?php$age=array("Peter"=>"35 ...

  5. PHP date_format() 函数

    ------------恢复内容开始------------ 实例 返回一个新的 DateTime 对象,然后格式化日期: <?php$date=date_create("2013-0 ...

  6. luogu P3645 [APIO2015]雅加达的摩天楼 分块 根号分治

    LINK:雅加达的摩天楼 容易想到设\(f_{i,j}\)表示第i个\(doge\)在第j层楼的最小步数. 转移显然是bfs.值得一提的是把初始某层的\(doge\)加入队列 然后转移边权全为1不需要 ...

  7. Spark Streaming高吞吐、高可靠的一些优化

    分享一些Spark Streaming在使用中关于高吞吐和高可靠的优化. 目录 1. 高吞吐的优化方式 1.1 更改序列化的方式 1.2 修改Receiver接受到的数据的存储级别 1.3 广播配置变 ...

  8. Elasticsearch入门指南

    好好学习,天天向上 本文已收录至我的Github仓库DayDayUP:github.com/RobodLee/DayDayUP,欢迎Star,更多文章请前往:目录导航 这篇文章主要是记录一下最近在学的 ...

  9. python3 openssl问题(贼有用)

    目录 一.问题描述 二.排查过程 三.总结 四.写在最后 一.问题描述 在python3 执行任何的request请求时,都会报以下的错误,纵观全网,以下基本尝试过了,对于我这个是无效的,后来不知道怎 ...

  10. ifstream

    eof() 这个东西是返回文件是否达到尾部. 在读取错误的时候才会触发. 这点要小心,如果写在while(eof) 即使到了文件尾部, 但并没有读取错误,很有可能再次进入循环,然后出现读取错误 .ge ...