页面上一个下载按钮,然后文件就哗哗的下载到你的本地了,这其中发生了什么?

1.首先点击按钮触发事件,调用接口去后台请求下载的文件,然后后台会以二进制流的方式把文件传到你这里,这里可能需要一点时间,你可以加个loading的动画,比如这样:

2.对于拿到的文件流,前端会将其转化为blob,并加上保存的分类:

const blob = new Blob([data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;'});

[data]就是你获取到的二进制流,后面的type就是你需要保存的文件格式,我这里需要保存的是excel的文件 所以上面的类型是xlsx的格式类型;这样一个文件格式是xlsx的blob;

3.对于一些现代浏览器,我们直接可以通过window.URL.createObjectURL方法处理blob,在dom里面创建一个a标签,js模拟点击下载,最后在将创建的a标签删除,

const url = window.URL.createObjectURL(blob);
let link = document.createElement('a');
link.setAttribute('href', url);
link.setAttribute('download', title);   //文件的保存名称
document.body.appendChild(link);
link.click();
document.body.removeChild(link);

这样就完成了在现代浏览器的下载文件,但是对于一些高版本的IE(IE10以上,不包括IE10)就会出问题

比如这样的错误

我们可以通过判断IE浏览器然后以本地保存的方式;

 const ie = navigator.userAgent.match(/MSIE\s([\d.]+)/),ie11 = navigator.userAgent.match(/Trident\/7.0/) && navigator.userAgent.match(/rv:11/),ieEDGE = navigator.userAgent.match(/Edge/g),ieVer = (ie ? ie[1] : (ie11 ? 11 : (ieEDGE ? 12 : -1)));if (ie && ieVer < 10) {this.message.error('No blobs on IE<10');return;}if (ieVer > -1) {window.navigator.msSaveBlob(blob, title);}

完整代码

downloadFile(title, data: Response) {const blob = new Blob([data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;'});const ie = navigator.userAgent.match(/MSIE\s([\d.]+)/),ie11 = navigator.userAgent.match(/Trident\/7.0/) && navigator.userAgent.match(/rv:11/),ieEDGE = navigator.userAgent.match(/Edge/g),ieVer = (ie ? ie[1] : (ie11 ? 11 : (ieEDGE ? 12 : -1)));console.log('ie:' + ie);console.log('ieVer:' + ieVer);if (ie && ieVer < 10) {this.message.error('No blobs on IE<10');return;}if (ieVer > -1) {window.navigator.msSaveBlob(blob, title);} else {const url = window.URL.createObjectURL(blob);let link = document.createElement('a');link.setAttribute('href', url);link.setAttribute('download', title);document.body.appendChild(link);link.click();document.body.removeChild(link);}}

前端页面里面的文件下载 兼容IE10+相关推荐

  1. Web前端页面的浏览器兼容性测试心得(三)总结一些IE8兼容问题的解决方案

    Web前端页面的浏览器兼容性测试心得(三)总结一些IE8兼容问题的解决方案 参考文章: (1)Web前端页面的浏览器兼容性测试心得(三)总结一些IE8兼容问题的解决方案 (2)https://www. ...

  2. Java文件下载,提供前端页面下载、HttpClient接口下载

    学习Java的文件上传/下载需要先明白一下几点: 1.下载的资源,有两种: 1).本地文件:即项目运行时可访问的文件目录,比如,在本机Idea中运行一个 fileServer,那么 fileServe ...

  3. vuepdf转换html,Vue网页html转换PDF(最低兼容ie10)的思路详解

    Vue网页html转换PDF(最低兼容ie10)的思路详解 发布时间:2020-10-16 13:05:09 来源:脚本之家 阅读:95 作者:冷藏封 HTML转PDF: 1.页面底层实现--Vue: ...

  4. 前端页面添加灰色滤镜,使网页整体变灰

    前端页面添加灰色滤镜,使网页整体变灰 修改css样式 只需要在html的样式里面加一句代码 html,body,div,img{-webkit-filter: grayscale(100%);-moz ...

  5. 关于前端页面在IE浏览器下无法显示的问题

    由于框架的发展和技术的革新,很多语言必须兼容浏览器才能很好的显示出新的特性和样式,那么我们的前端页面如果在IE浏览器下无法显示时该用什么办法提示用户(提示用户升级浏览器)??? 最实用的办法就是加上判 ...

  6. 前端页面优化之完善篇

    前端页面优化 学习目标 了解为何进行前端页面的优化 了解SEO,掌握前端页面语义性的评判标准与规则 从代码可读性角度进行页面优化 为何进行前端优化 加载速度更快 -- 速度就是王道 成本耕地 -- 人 ...

  7. 微服务项目之电商--9.商城架构图及商城管理系统前端页面介绍及电商项目初步搭建(1)

    目录 一.商城架构图 前端: 二.商城管理系统前端页面 1.SPA介绍 2.webpack 四个核心概念 3.vue-cli 安装 4.项目测试 三.电商项目搭建 创建父模块管理 创建子模板注册中心l ...

  8. Vue的使用 -- 基于Vue搭建前端页面

    Vue的使用 – 基于Vue搭建前端页面 首先,用到的前端技术只有 Vue.Element-ui.axios.Echarts,至于其它的技术点,我一个后端很少接触. 其次,Echarts 我也不怎么会 ...

  9. 前端页面性能优化 - 字体加载优化

    相比于英文的字库来说,中文字库的体积非常之大,小则1M,动辄几十 M 的体积非常常见.所以在前端页面性能优化中,字体加载的优化就显得尤为重要.阅读了相关的知识和文章,在研究了市面上字体加载方案之后,我 ...

最新文章

  1. 2022-2028年中国电容器电子薄膜行业市场研究及前瞻分析报告
  2. MacOS 下使用 intellij IDEA 将git上传项目到 Github
  3. python绘制动态图-Python利用Echarts绘制动态交互图:快速入门
  4. Python编程基础:第三十六节 模块Modules
  5. 【下一代核心技术DevOps】:(三)私有代码库阿里云Git使用
  6. 戴尔新版bios设置中文_戴尔电脑装机过程
  7. FPGA——基于Verilog HDL语言的交通信号灯控制系统
  8. 电力电气自动计算excel表格大全【共46份】
  9. 程序猿必备的17款最佳的代码审查工具
  10. 史话下:量子物理学的前世今生
  11. puzzle(010.1)自我指涉的选择题
  12. 搭建 Asp.net 云服务器
  13. python中的IO操作
  14. 记 · 七言古诗 · 劝学
  15. android 抽奖动画下载,召唤抽奖系统正式版
  16. 【R】【课程笔记】04+05 数据预处理+收益率计算
  17. Golang包管理工具(三)之dep的使用
  18. NC 开发环境因电脑高分辨率导致系统文字、图标变小等。
  19. 前端实现高效的海报系统
  20. MRPT学习(二)——Win10安装MRPT

热门文章

  1. Element el-tag 标签详解
  2. 系统集成项目管理工程师答题卡样式
  3. 磁器口雅思培训-快速提高雅思听力的方法
  4. Thinkpad x201i 拆机清理风扇
  5. 关于FT和TTa引脚作为数据IO时配置问题
  6. 和Leo一起做爱数学的好孩子之[SHOI2014]概率充电器
  7. 中国黑客档案:黑客近景写真(1)
  8. 最新最全的 layUI 框架使用教程视频教程分享
  9. 如何使用ChatGPT帮助孩子辅导作业?
  10. IOS开发之新浪微博OAuth2