一次下载多个文件的解决思路(iframe) - Eric


真实经历

最近开发项目需要做文件下载,想想挺简单的,之前也做过,后台提供下载接口,前端使用window.location.href就行了呗。不过开发的时候发现,有些文件有附属文件,点击 下载按钮 需要下载两个文件,而且不能使用压缩包的形式。想想不是也挺简单,点击 下载 发送两个下载请求不就搞定了么。

说干就干,三下五除二就写好了,当点击 下载 的那一刻懵逼了, 第一个请求竟然自动Cancelled了,顿时一万个草泥马崩腾而过(因为是国外服务器,下载比较慢导致第一个请求被Cancelled),这就意味着快速点击不同的 下载 按钮也会有同样的问题,这不行啊,然后开始了自己的下载探索之旅。


a标签 & location.href

我们知道a标签及href指向的如果是一个下载链接,那么相当于下载文件,对于单文件下载还是ok的,不过快速点击几个下载按钮,有的下载会被Cancelled,这可不行,继续百度。

上一段代码:


const download = (url)=>{
window.location.href = url;
}

window.open

我们知道window.open可以打开一个新窗口,那么是不是可以实现下载呢,激动的我赶紧试了试,下载的确可以,不过会快速打开一个新窗口并且关闭,体验非常不好,果断放弃了。


iframe

突然想到iframe也可以向服务器发请求的,激动的我又赶紧试了试,哇塞,果然可以下载,而且没有违和感,代码贴出来。


export const downloadFile = (url) => {
const iframe = document.createElement("iframe");
iframe.style.display = "none"; // 防止影响页面
iframe.style.height = 0; // 防止影响页面
iframe.src = url;
document.body.appendChild(iframe); // 这一行必须,iframe挂在到dom树上才会发请求
// 5分钟之后删除(onload方法对于下载链接不起作用,就先抠脚一下吧)
setTimeout(()=>{
iframe.remove();
}, 5 * 60 * 1000);
}

ps: iframe不会相互影响,可以连续下载哦!


其他方案

当然还有一些其他方式,Form下载、二进制流下载等,有空的小伙伴自行研究吧!


原文地址:https://segmentfault.com/a/1190000016771027

最新文章

  1. 对express中引入文件时提示Error: Cannot find module错误的理解
  2. please wait while windows configures microsoft visual studio professional 2013 [转载]
  3. linux日志文件
  4. bat基础命令
  5. iOS 硬件授权检测:定位服务、通讯录、日历、提醒事项、照片、蓝牙共享、麦克风、相机等(转)
  6. 帧动画FrameAnimation
  7. UnicodeEncodeError
  8. [开发笔记]-使用jquery获取url及url参数的方法
  9. POJ 3185 The Water Bowls (高斯消元 求最小步数)
  10. HoG feature for human detection(HoG 行人识别)
  11. Stack trace对性能的影响
  12. redis数据类型-字符串类型
  13. [Swift]LeetCode859. 亲密字符串 | Buddy Strings
  14. Linux创建用户与权限赋值
  15. 【实践】Yalmip使用Knitro的一些总结
  16. ccf跳一跳
  17. Java并发编程_wait/notify和CountDownLatch的比较(三)
  18. React 中的 Component、PureComponent、无状态组件 之间的比较
  19. __int64 与long long 的区别
  20. Restful api 防止重复提交

热门文章

  1. 重构学习day01 类型码 类型码的上层建筑 与类型码相关的重构方法 1.使用子类代替类型码 2.使用状态或策略模式代替类型码
  2. 结束线程方法2 Java提供的中断机制
  3. gns3 拖出设备显示一个红色的s,无法启动虚拟设备
  4. 网络流--Dinic(自用,勿看)
  5. bootstrap-table 基础用法
  6. c语言中的赋值
  7. Linux远程连接及常用指令
  8. Bootstrap 入门到精通
  9. Hibernate学习之简单应用
  10. MVC使用方法