当前位置: 首页 > news >正文

前端文件下载

这里写自定义目录标题

  • 前端文件下载方法
    • 使用a标签
    • 使用iframe标签
    • 二进制流

前端文件下载方法

使用a标签

/*** 文件下载方法 使用a标签* 存在浏览器下载时,太快的话,会取消上次的下载请求* @param {*} href* @param {*} filename*/
export function downloadFile(href, filename) {if (href) {let a = document.createElement('a');// 指定下载的文件名filename && (a.download = filename);a.href = href; //  URL对象const id = 'download' + Math.random();a.id = id;document.body.appendChild(a);a.click(); // 模拟点击URL.revokeObjectURL(a.href); // 释放URL 对象// document.body.removeChild(a);document.getElementById(id).remove();}
}

使用iframe标签

/*** 文件下载方法 使用iframe* 可解决浏览器下载时,太快的话,会取消上次的下载请求* @param {*} url*/
function downloadFileIframe(url) {try {let eleIF = document.createElement('iframe');eleIF.src = url;eleIF.style.display = 'none';document.body.appendChild(eleIF);//防止下载2次setTimeout(function () {document.body.removeChild(eleIF);}, 1000);} catch (e) {console.log(e);}
}

二进制流

将接口完全请求回来的二进制流,在浏览器侧转换成文件下载。这种方案,如果下载的文件特别大的情况会导致浏览器内存特别大,不建议这种方案。

// 将url转成blob地址
fetch(url).then(res => res.blob()).then(blob => {const a = document.createElement('a');// 将链接地址字符内容转变成blob地址a.href = URL.createObjectURL(blob);a.download = filename; // 下载文件的名字document.body.appendChild(a);a.click();// 下载完成后 清除占用的缓存资源window.URL.revokeObjectURL(a.href);document.body.removeChild(a);});

参考文章:
通过动态创建a标签,循环批量下载文件所遇到的问题记录

http://www.lryc.cn/news/501847.html

相关文章:

  • 前端成长之路:HTML(3)
  • 无人机自动机库的功能与作用!
  • ubuntu 新建脚本shell并增加图标 双击应用实现python运行
  • ANR 分析SOP
  • COLA学习之环境搭建(三)
  • CSS输入框动态伸缩动效
  • hbuilder 安卓app手机调试中基座如何设置
  • 探索视觉与语言模型的可扩展性
  • sock_recvmsg函数
  • HCIA笔记8--DHCP、Telnet协议
  • Scala的单例对象
  • 【笔记】分布式任务调度平台XXL-JOB
  • PDFMathTranslate,PDF多语言翻译,批量处理,学术论文,双语对照(WIN/MAC)
  • zerotier实现内网穿透(访问内网服务器)
  • Formality:set_svf命令
  • IDEA报错:无效的源发行版、无效的目标发行版
  • #渗透测试#红蓝对抗#SRC漏洞挖掘# Yakit插件使用及编写01
  • Scala中求斐波那契数列的第n项
  • ORACLE修改序列值为表内某字段(主键)最大值
  • 前端html,vue使用第三方地图详细教程,以百度地图为例,实现地图标注,导航,定位,路线规划,坐标转换
  • 【入门】加密四位数
  • [游戏开发] Unity中使用FlatBuffer
  • 云计算IaaS-PaaS-SaaS三种服务模式转至元数据结尾
  • 【数据结构——查找】二叉排序树(头歌实践教学平台习题)【合集】
  • 代码随想录第43天
  • LeetCode - #158 用 Read4 读取 N 个字符 II
  • C++(进阶) 第2章 多态
  • mac删除程序坞(Dock)中“无法打开的程序“
  • 【Linux】vi/vim 使用技巧
  • Python自动化办公(系统维护及开发任务状态自动推送)