chrome下载文件不预览的解决办法(兼容IE)

 费德  2019/03/28 16:15  1,796 次

在html5中给a标签加了个download属性,只要加上即可实现下载,看似很美好,实际却有很多的限制。

1.在chrome下如果下载地址和网站跨域,它将默认打开文件预览,而不会自动下载,而我们的项目中文件都是放在oss上的,不可避免遇到这个问题。

我们的解决方案是由后端新增一个下载接口,我们把url和name传过去,然后后端返回下载好的文件流。
我们将文件流转换成blob对象

const blob = await response.blob();

创建一个链接,并触发click事件

const tmpUrl = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = tmpUrl;
a.download = decodeURI(options.fileName);
a.click();

2. firefox 下无法直接触发

  const tmpUrl = window.URL.createObjectURL(blob);
  const a = document.createElement('a');
  a.href = tmpUrl;
  a.download = decodeURI(options.fileName);
  document.body.appendChild(a);
  setTimeout(() => {
    a.click();
    a.remove();
  }, 0);

3. IE浏览器提示拒绝访问,在tmpUrl前增加

if (navigator.appVersion.toString().indexOf('.NET') > 0) {
  window.navigator.msSaveBlob(blob, options.fileName);
  return;
}

 作者:费德

少年费德的奇幻漂流

本博客如无特殊说明皆为原创,转载请注明来源:chrome下载文件不预览的解决办法(兼容IE)

添加新评论