上个星期碰到了在IE浏览器上无法下载文件但是在谷歌上面却可以的问题,下面是我的代码:

function fetchPost(url, data, fileName) {fetch(url,{method: 'POST',body: data,}).then(response => {if (response.ok) {return response.blob(); // 处理二进制数据流,返回blob对象}else {return Promise.reject(response);}}).then(blob => {let url = window.URL.createObjectURL(blob); // //创建下载的链接let a = document.createElement('a');a.href = url;document.body.appendChild(a)a.download = fileName; // 下载文件的文件名a.click(); // 点击下载document.body.removeChild(a) // 下载完成移除a元素window.URL.revokeObjectURL(url) //释放掉blob对象}).catch(e => {})
}

我用的是fetch而不是ajax,不过和不能下载文件没有关系。
前端文件下载方法有很多,我用的是通过a标签的方式来下载,在谷歌上确实可以下载,但是在IE浏览器上无效,然后上网查询相关的问题,发现是IE不支持这种写法,要给IE做兼容处理:

function fetchPost(url, data, fileName) {fetch(url,{method: 'POST',body: data,}).then(response => {if (response.ok) {return response.blob(); // 处理二进制数据流,返回blob对象}else {return Promise.reject(response);}}).then(blob => {let url = window.URL.createObjectURL(blob); // //创建下载的链接if (window.navigator.msSaveBlob) {// ie 浏览器try {window.navigator.msSaveBlob(blob, fileName)} catch (e) {// console.log(e)}} else {// 谷歌浏览器 创建a标签 添加download属性下载let a = document.createElement('a');a.href = url;document.body.appendChild(a)a.download = fileName; // 下载文件的文件名a.click(); // 点击下载document.body.removeChild(a) // 下载完成移除a元素window.URL.revokeObjectURL(url) //释放掉blob对象}}).catch(e => {})
}

然后在IE上也能愉快的下载了。
然后说说文件名,我上面的代码中是前端直接生成文件名的,不过也有后端把文件名通过’Content-Disposition‘传给前端这种方式,不过后端需要经过特殊处理(怎么处理就不说了,因为我是前端),当我通过这种方式获取文件名的时候问题就出现了,通过网上查看他人的获取方式:

response.headers['Content-Disposition']

试了很多遍都获取不到,一直是undefined,于是当时放弃了这种方式,还是选择前端生成文件名的方式。不过今天因为没什么事情,于是我又重新研究了一下fetch,看了一下官网的api,无意间看到了这个:

意识到可能是上次的获取方式有问题,于是试了下,发现问题解决了,因为一开始的获取方式是针对ajax的,但是我用的是fetch发送请求,因为没有考虑到这一点,所以获取失败,这是针对fetch的获取方式:

response.headers.get('Content-Disposition')

最终还是把问题解决了,但是以后用到新技术的话一定要把官网认真的看一遍。

前端兼容IE的下载文件方法相关推荐

  1. 前端通过url链接下载文件

    前端通过url链接下载文件 网上找到几个相关的方法,如下 // 方法一: const form = document.createElement('form'); form.setAttribute( ...

  2. 百度云下载文件方法:PC 和 群晖 Docker

    百度云下载文件方法:PC 和 群晖 Docker  目录 - 百度云下载文件方法:PC 和 群晖 Docker     - 1.PC端其它软件         - 1.1.百度云客户端的替代软件    ...

  3. js下载文件方法记录

    js下载文件方法记录 downLoadExcel() { this.downloading = true axios.get(/xxxx, { responseType: 'blob', params ...

  4. 天翼云盘突破限制无需客户端下载文件方法

    天翼云盘突破限制无需客户端下载文件方法 在线网盘的市场当中,百度网盘一直处于"主导"地位. 这么肥的一块蛋糕,其他厂商自然不想丢掉,所以他们也一直在做自己的网盘,只是影响力太小.大 ...

  5. Vue项目:js模拟点击a标签下载文件并重命名,URL文件地址下载方法、请求接口下载文件方法总结。

    URL文件地址下载方法 一.正常情况下,我们都如此下载文件并修改文件名,在a标签上面添加download属性 //文件下载downFile() {if ('download' in document. ...

  6. 前端通用下载文件方法(兼容IE10及以上)

    之前在网上看到一个博主写的前端通用的下载文件的方法,个人觉得很实用,所以mark一下,方便以后查阅 源文地址(源文还有上传/下载excel文件方法) 因为项目要求要兼容IE浏览器,所以完善了一下之前博 ...

  7. JS 下载文件方法分享(解决图片文件无法直接下载和 IE兼容问题)

    场景简介 由于业务需要,经常遇到下载各类文件的需求,其中最头疼的莫过于前端下载图片了,直接给个图片文件地址会变成直接打开图片,而不是弹窗提示另存为,研究了下前端实现文件下载最便捷的方法还是创建 a 标 ...

  8. 前端vue项目-关于下载文件pdf/excel

    最近在做一些需求,需要下载一些文件信息,最频繁的就是下载excel文件到本地了 看过了很多方法,做个整理吧哈哈哈哈 参考的文章链接: https://www.cnblogs.com/jiangweic ...

  9. 完美解决前端无法上传大文件方法

    1 背景 用户本地有一份txt或者csv文件,无论是从业务数据库导出.还是其他途径获取,当需要使用蚂蚁的大数据分析工具进行数据加工.挖掘和共创应用的时候,首先要将本地文件上传至ODPS,普通的小文件通 ...

最新文章

  1. 电商运营-跨境开网店全图解
  2. 招银网络笔试java_2020招银网络科技校园招聘常见问题
  3. catia 无许可证服务器名称,win10升级2004后CATIA无法连接许可证服务器解决方案(2页)-原创力文档...
  4. windows服务守护进程bat脚本、windows窗体守护进程bat脚本
  5. 【Spring实战4】04---装配Bean(自动装配)
  6. 直播中那几秒延时到底来自哪?
  7. socket网络编程——TCP编程流程及端口号占用问题
  8. SpringCloud与子项目版本兼容说明
  9. hdu1372 Knight Moves BFS 搜索
  10. php时间转两位数年份,PHP常用时间函数资料整理
  11. 【LeetCode 剑指offer刷题】树题19:8 二叉树中序遍历的下一个结点
  12. Atitit.编程语言原理---方法重载的实现与设计 调用方法的原理
  13. hadoop配置集群的心得
  14. Linux开发书籍推荐
  15. 【uni-app】第三方ui组件推荐引入的方法
  16. 基于微信小程序的点餐系统设计毕业设计论文
  17. 腾讯人均月薪 8 万,恍恍惚惚,又被平均了?
  18. {转载}——jvm verbose 参数详解
  19. 西门子杯-工业信息网络化
  20. 如何更改VUE项目运行名称以及Logo图标

热门文章

  1. YOLOv5NEU-DET钢材表面缺陷任务
  2. CorelDRAW中的制表位该如何添加
  3. css加号图标_DIV,CSS如何实现“加减号”“显示隐藏”效果
  4. 预测海藻数量(R语言)
  5. codeforces 1182E Product Oriented Recurrence 矩阵快速幂
  6. 《智能路由器开发指南》——第1章 智能路由器概述 1.1 OpenWrt简介
  7. EXCEL VBA 自定义函数 招标代理费计算
  8. 应用层 HTTP 代理服务器转发消息时的相关头部 请求头 X-Forwarded-For
  9. 中国工程院院士沈昌祥:网络必须安全可信 5G缺安全可信
  10. 如何在传奇服务器里建网站,传奇帮30课-在IIS上建立网站跟常用的设置教程_【传奇爱好者】...