axios里的responseType

背景

我在Node.js上通过axios下载一段音频

const audioContent = await axios.get(downloadSrc, {
 });

打开文件后竟然提示文件格式损坏
凭借我多年朴素的直觉,应该是要设置responseType:'blob',还是不行,直到一顿搜索引擎,发现了responseType: "arraybuffer", 可以了

看axios源码

我想一定是axios根据responseType: "arraybuffer"对返回类型做了什么特殊处理,结果看了半天源码也没发现端倪,凭借我多年朴素的直觉,我想到了XMLHttpRequest

XMLHttpRequest

XMLHttpRequest 本身就是支持responseType

  • ""
    responseType 为空字符串时,采用默认类型 DOMString,与设置为 text 相同。
  • arraybuffer
    response 是一个包含二进制数据的 JavaScript ArrayBuffer。
  • blob
    response 是一个包含二进制数据的 Blob 对象 。
  • document
    response 是一个 HTML Document 或 XML XMLDocument,这取决于接收到的数据的 MIME 类型。请参阅 XMLHttpRequest 中的 HTML 以了解使用 XHR 获取 HTML 内容的更多信息。
  • json
    response 是一个 JavaScript 对象。这个对象是通过将接收到的数据类型视为 JSON 解析得到的。
  • text
    response 是一个以 DOMString 对象表示的文本。
  • ms-stream
    response 是下载流的一部分;此响应类型仅允许下载请求,并且仅受 Internet Explorer 支持。
    var ajaxObj = new XMLHttpRequest();
    ajaxObj.responseType = "arraybuffer";
    ajaxObj.open("get", "http://10.210.2.133:9192/example/api/simple/object");
    ajaxObj.send();
    ajaxObj.onreadystatechange = function () {
      if (ajaxObj.readyState == 4 && ajaxObj.status == 200) {
        console.log(ajaxObj.responseText);
      }
    };

推荐阅读更多精彩内容