1.在js中第一种方式
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true); // 也可以使用POST方式,根据接口
xhr.responseType = "blob"; // 返回类型blob
xhr.onload = function () {
if (this.status === 200) {
var blob = this.response;
var reader = new FileReader();
// 转换为base64,可以直接放入a表情href
reader.readAsDataURL(blob);
reader.onload = function (e) {
var a = document.createElement('a');
a.download = 'data.zip';//下载文件名
a.href = e.target.result;
$("body").append(a); // 修复firefox中无法触发click
a.click();
$(a).remove();
}
}
};
xhr.send();
1.在js中第二种方式注意该方式会新打开一个页面
function downloadSend(url) {
var ticketNumber=$("#ticketNumber").val();
var json = {
"searchJson":ticketNumber
};
var form = $("<form>");
form.attr('style', 'display:none');
form.attr('target', '');
form.attr('method', 'post'); //请求方式
form.attr('action', url);//请求地址
var input1 = $('<input>');//将你请求的数据模仿成一个input表单
input1.attr('type', 'hidden');
input1.attr('name', 'json');//该输入框的name
input1.attr('value',JSON.stringify(json));//该输入框的值
$('body').append(form);
form.append(input1);
form.submit();
form.remove();
//防止页面跳转
return false;
}
3.java后端只需要一个工具类就可以通知浏览器打包下载批量文件;
/**
* 通知浏览器打包下载文件
* @param srcfile 存放file文件的集合
* @param fileNameList 存放文件名的集合 (注意:需要与srcfile文件对应)
* @param zipFileName 压缩包名字
* @param response 响应
* @throws IOException
*/
public static void zipFiles(List<File> srcfile, List<String> fileNameList,String zipFileName, HttpServletResponse response) throws IOException {
byte[] buf = new byte[1024];
// 获取输出流
BufferedOutputStream bos = null;
try {
bos = new BufferedOutputStream(response.getOutputStream());
} catch (IOException e) {
e.printStackTrace();
}
FileInputStream in = null;
ZipOutputStream out = null;
try {
response.reset(); // 重点突出
// 不同类型的文件对应不同的MIME类型
response.setContentType("application/x-msdownload");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + zipFileName + ".zip");
// ZipOutputStream类:完成文件或文件夹的压缩
out = new ZipOutputStream(bos);
for (int i = 0; i < srcfile.size(); i++) {
in = new FileInputStream(srcfile.get(i));
// 给列表中的文件单独命名
out.putNextEntry(new ZipEntry(fileNameList.get(i)));
int len = -1;
while ((len = in.read(buf)) != -1) {
out.write(buf, 0, len);
}
}
out.close();
bos.close();
LOGGER.info("压缩完成.");
} catch (Exception e) {
LOGGER.error(e);
} finally {
if (in != null) in.close();
if (out != null) out.close();
}
}
补充:新人做笔记使用;如有错误请大佬手下留情,望指正,必改正!(谢谢!!!)