要求:后台只编写下载单个文件的接口,批量下载让前端遍历发送下载请求(这个批量下载的前提要求是:一个文件一个文件的下载,不能打包):
前端代码demo
function downloadFile(url){
//创建标签;
var iframe = document.createElement(“iframe”);
//该标签不显示;目的是在页面不要显示该标签;
iframe.style.display = "none";
//设置高度为0;
iframe.style.height = 0;
//设置下载路径
iframe.src = url;
// 这一行必须有,iframe绑定在dom树上才会发请求
document.body.appendChild(iframe);
// 1分钟之后删除该标签
setTimeout(function (){
iframe.remove();
}, 1 * 60 * 1000);
}
调用的时候只需要循环调用这个方法,把url(下载地址)传进去即可。如图:
$("#button").onclick(function(){
var urls = ["http://demo/download?fileId=xxxxxxxxxxxxxx1","http://demo/download?fileId=xxxxxxxxxxxxxx2"];
for (var i = 0; i < urls.length; i++){
downloadFile(urls[i]);
}
})
后端代码demo如下图:
@RequestMapping("/download")
public void download(@RequestParam String fileIds, HttpServletResponse response){
response.setHeader("Content-Disposition", "attachment;filename=\""
+ java.net.URLEncoder.encode(fileName, "UTF-8") + "\"");
OutputStream outputStream = response.getOutputStream()
FileInputStream fileInputStream = new FileInputStream(new File("D://a.docx"));
byte [] buff = new byte[1024];
int len = 0;
while((len = fileInputStream.read(buff)) > 0){
outputStream.write(buff, 0, len);
}
}