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. WPF入门教程(一)---基础

    这篇主要讲WPF的开发基础,介绍了如何使用Visual Studio 2013创建一个WPF应用程序. 首先说一下学习WPF的基础知识: 1) 要会一门.NET所支持的编程语言.例如C#. 2) 会一 ...

  2. Python随机数函数

    Python随机数函数: ''' choice(seq) 从序列的元素中随机选出一个元素 randrange ([start,] stop [,step]) 从指定范围内,在指定步长递增的集合中 获取 ...

  3. PHP xml_get_current_byte_index() 函数

    定义和用法 xml_get_current_byte_index() 函数获取 XML 解析器的当前字节索引.高佣联盟 www.cgewang.com 如果成功,该函数则返回当前字节索引.如果失败,则 ...

  4. PHP strncmp() 函数

    实例 比较两个字符串(区分大小写): <?php高佣联盟 www.cgewang.comecho strncmp("Hello world!","Hello ear ...

  5. Skill 脚本演示

    https://www.cnblogs.com/yeungchie/ Schematic ycBusNet.il 用于原理图中按照一定格式,批量创建 Bus . ycNetToPin.il 通过选中一 ...

  6. luogu P4726 【模板】多项式指数函数 多项式 exp 牛顿迭代 泰勒展开

    LINK:多项式 exp 做多项式的题 简直在嗑药. 前置只是 泰勒展开 这个东西用于 对于一个函数f(x) 我们不好得到 其在x处的取值. 所以另外设一个函数g(x) 来在x点处无限逼近f(x). ...

  7. 4.19 ABC F path pass i 容斥 树形dp

    LINK:path pass i 原本想了一个点分治 yy了半天 发现重复的部分还是很难减掉 况且统计答案的时候有点ex. (点了别人的提交记录 发现dfs就过了 于是yy了一个容斥 发现可以直接减掉 ...

  8. java多线程的问题

    1.多线程有什么用 (1) 发挥多核CPU的优势 单核CPU上所谓的"多线程"那是假的多线程,同一时间处理器只会处理一段逻辑,只不过线程之间切换得比较快,看着像多个线程" ...

  9. [NewLife.Net]单机400万长连接压力测试

    目标 对网络库NewLife.Net进行单机百万级长连接测试,并持续收发数据,检测网络库稳定性. [2020年8月1日晚上22点] 先上源码:https://github.com/NewLifeX/N ...

  10. python 把多个list合并为dataframe并输出到csv文件

    import pandas as pd a = [1,2,3] b = ['a','b','c'] test = pd.DataFrame({'a_list':a,'b_list':b}) 将两个列表 ...