当前位置: 首页 > Web前端 > HTML

一次下载多个文件的解决方案-JS

时间:2023-04-02 11:59:03 HTML

一次下载多个文件(iframe)的解决方案-Eric的真实经历最近开发项目需要下载文件。想起来很简单。之前做过,后台提供下载接口,前端使用window.location.href即可。但是在开发过程中,发现部分文件带有附件。点击下载按钮需要下载两个文件,不能使用压缩包的形式。想一想,是不是很简单,点击下载,发送两个下载请求,不就搞定了吗?说到做到,写三遍五遍二遍。当你点击下载时,你惊呆了。第一个请求自动取消,突然10000个草泥马冲过去(因为是外服,下载比较慢导致第一个请求被取消),意思是快速点击不同的下载按钮也会出现同样的问题,这样不好,然后开始了自己的下载探索之旅。atag&location.href我们知道如果atag和href指向一个下载链接,就相当于下载了一个文件。单个文件下载还是可以的,但是如果快速点击几个下载按钮,有些下载会被取消。不行,继续百度。最后一段代码:constdownload=(url)=>{window.location.href=url;}window.open我们知道window.open可以打开一个新窗口,那么是不是可以实现下载呢?激动得连忙试了试,下载确实可以,但是会很快打开一个新窗口然后关闭,体验很差,果断放弃。iframe突然想到iframe也可以向服务器发送请求,激动又试了下,哇,可以下载了,而且没有违和感,代码贴出来。exportconstdownloadFile=(url)=>{constiframe=document.createElement("iframe");iframe.style.display="无";//防止影响页面iframe.style.height=0;//防止影响页面iframe.src=url;document.body.appendChild(iframe);//这一行是必须的,iframe只有挂在dom树上才会发送请求//5分钟后删除(onload方法对下载链接不起作用,所以先挖脚)setTimeout(()=>{iframe.remove();},5*60*1000);}ps:iframe不会互相影响,可以连续下载!其他的解决办法当然还有其他的方法,表格下载,二进制流下载等等,大家有时间自己研究吧!