美文网首页项目总结
文件流形式下载文件

文件流形式下载文件

作者: 芒果加奶 | 来源:发表于2018-07-19 18:37 被阅读0次

1、需求

下载文件,掉接口后后端返回文件流。使用window.location.href=url不能正确下载文件

2、解决

    let url = `/event/export?start=${params.start}&end=${params.end}${modules}`;
    let xhr = new XMLHttpRequest();
    xhr.open("GET", url, true); // 也可以使用POST方式,根据接口
    xhr.responseType = "blob"; // 返回类型blob,XMLHttpRequest支持二进制流类型
    xhr.onload = function() {
      if (this.status === 200) {
        let blob = this.response; //使用response作为返回,而非responseText
        let reader = new FileReader();
        reader.readAsDataURL(blob); // 转换为base64,可以直接放入a标签href
        reader.onload = function(e) {
          // 转换完成,创建一个a标签用于下载
          let a = document.createElement("a");
          a.download = "原始数据.xlsx";
          a.href = e.target.result;
          a.click();
        };
      }
    };
    xhr.send();

原因:ajax无法请求流文件,需要使用XMLHttpRequest 请求
参考:ajax 请求二进制流 图片文件XMLHttpRequest 请求并处理二进制流数据 之最佳实践

3、简述blob对象

  • 代表二进制类型的对象,表示不可变的类似文件对象的原始数据,通俗点说,就是Blob对象是二进制数据,但它是类似文件对象的二进制数据。
  • blob URL 是blob形式的url,格式blob:http://XXX,可以通过URL.createObjectURL(blob)创建。
  • blob URL只能应用内部使用,不能像data URL一样在浏览器上随意使用。

相关文章

网友评论

    本文标题:文件流形式下载文件

    本文链接:https://www.haomeiwen.com/subject/zrstmftx.html