利用javascript或者a标签下载文件的兼容性问题

发布于 2022-09-11 21:28:42 字数 1056 浏览 26 评论 0

项目中有上传功能,文件最大300M,文件类型不限。目前需要做下载功能,主要兼容主流浏览器,QQchromeIE11等,所以想利用.

今天网上查了一下,发现主要分两类:

  1. Blob
  2. a 标签

第一种方式由于需要后台支持,并且下载完成浏览器才会有响应,对于大文件下载体验不太好,所以想用第二种方式,关键还简单:

代码如下:

  let _filename = filename || url.substr(url.lastIndexOf('/') + 1)
  
  var element = document.createElement('a');
  element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(url));
  element.setAttribute('download', _filename);
  element.setAttribute('target', '_blank')
  element.style.display = 'none';
  document.body.appendChild(element);

  element.click();

  document.body.removeChild(element);

这种方式在chrome下载视频图片都没问题,但是在IE11下就行不通了,提示如下:

图片描述

点击允许显示如下,也找不到下载方式。

图片描述

有什么好办法处理这种需求呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

两仪 2022-09-18 21:28:42

要下载文件肯定已经在服务器了,直接a标签把文件地址放进去下载把

快乐很简单 2022-09-18 21:28:42

用blob, 兼容IE 用 navigator.msSaveBlob();

青瓷清茶倾城歌 2022-09-18 21:28:42

比较常用解决方案是后端添加一个响应头

Content-Disposition

这样浏览器默认会已附件方式下载,而不是预览.

https://segmentfault.com/a/11...

酒浓于脸红 2022-09-18 21:28:42

IE 不支持 a标签的download, download.js ,有npm库,直接使用都兼容

相权↑美人 2022-09-18 21:28:42

Content-Disposition 是最合适的一种方案,他可以定义名称。

  1. download 也可以接受,但是你没写对呀element.setAttribute('href', 'data:text/plain;charset=utf-8,' + encodeURIComponent(url));是什么鬼东西。难道不是element.setAttribute('href', url);
    测试地址
  2. blob 啥的也是基于download的吧
心的位置 2022-09-18 21:28:42

其实使用a标签确实兼容不了,考虑下把a标签更换成iframe标签就好了,也就是你创建a标签的那串代码,改成创建iframe就可以了

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文