文件流形式下载文件

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一样在浏览器上随意使用。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文详细介绍了 XMLHttpRequest 相关知识,涉及内容: AJAX、XMLHTTP、XMLHttpReq...
    semlinker阅读 14,706评论 2 18
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,518评论 1 45
  • 人人皆有摩尼珠,但求上下遍荒芜。 一日尘尽照十方,此身无我亦无心。
    十年一井阅读 1,522评论 0 0
  • 1.HDFS简介 正如其名,HDFS(Hadoop Distribution File System)是一个分布式...
    Michaelhbjian阅读 7,247评论 0 2
  • 夜空缀着点点星辰,一弯月牙儿正从蝉翼般透明的云层里钻出来,抛洒着银色的清辉。似水月光斜斜地射入一扇窗户,朦胧...
    koppppu阅读 1,337评论 0 0

友情链接更多精彩内容