在项目中有一个需求用户选中多个文件,然后一起下载
- 刚开始还想着用ajax来发起请求,但是发现,好像浏览器的下载框就弹不出来了,难道我还要去写个下载框?算了算了果断放弃。
-
a标签和location.href,我们知道a标签及href指向的如果是一个下载链接,那么相当于下载文件,对于单文件下载还是ok的,不过对于我这个多文件下载来说,明显不满足需求,一个新的链接发起请求,老的链接会被canceled,不行不行
-
window.open,我们知道window.open可以打开一个新窗口,那么是不是可以实现下载呢,激动的我赶紧试了试,不过会快速打开一个新窗口并且关闭,体验非常不好,而且我这里测试出来好像也不能同时下载多个文件,还是只有一个文件开启下载
-
iframe,突然想到iframe也可以向服务器发请求的,激动的我又赶紧试了试,哇塞,果然可以下载,而且没有违和感,代码贴出来
for (let i = 0; i < data.length; i++) {
const iframe = document.createElement("iframe");
iframe.style.display = "none";
iframe.style.height = 0;
// url自己进行指定
iframe.src = "/disk/api/file/download/" + data[i].id;
document.body.appendChild(iframe);
// 不能马上将iframe进行删除,否者也会出现马上取消的情况
setTimeout(() => {
iframe.remove();
}, 5 * 1000);
}
而且iframe方式在chrome和360浏览器下,会提醒是否允许下载多个文件,难道这还是一种非常标准的方式??