responseType体验

博客讲述了在项目中遇到的前端下载二进制文件失败的问题,通过尝试设置不同的Blob类型和HTTP响应头的content-type,最终发现设置XMLHttpRequest的responseType为'blob'能成功解析并打开文件。文章强调了responseType的重要性,解释了其不同值的含义和兼容性问题,并提醒注意同步请求设置responseType可能引发的错误。

项目中有一个按钮下载后端传过来的二进制文件,无奈设置了各种的二进制type,后端传的解析type都无法打开文件。

let url = new Blob([res.data], { type: res.headers["content-type"] });
let fileName = res.headers["content-disposition"]
  .split(";")[1]
  .split("filename=")[1];
const elink = document.createElement("a");
elink.href = URL.createObjectURL(url);
elink.download = decodeURIComponent(fileName);
elink.style.display = "block";
document.body.appendChild(elink);
elink.click();
window.URL.revokeObjectURL(elink.href);
document.body.removeChild(elink);

后来设置了promise请求的对象的responseType: "blob",成功解析文件,打开了文件。下面对responseType做一下记录。

XMLHttpRequest.responseType 属性是一个枚举类型的属性,返回响应数据的类型。它允许我们手动的设置返回数据的类型。如果我们将它设置为一个空字符串,它将使用默认的"text"类型。

将responseType的值设置为"document"通常会被忽略. 当将responseType设置为一个特定的类型时,你需要确保服务器所返回的类型和你所设置的返回值类型是兼容的。那么如果两者类型不兼容呢?恭喜你,你会发现服务器返回的数据变成了null,即使服务器返回了数据。还有一个要注意的是,给一个同步请求设置responseType会抛出一个InvalidAccessError 的异常。

responseType支持以下几种值:

  1. “”
    responseType 为空字符串时,采用默认类型 DOMString,与设置为 text 相同。
  2. arraybuffer
    response 是一个包含二进制数据的 JavaScript ArrayBuffer。
  3. blob
    response 是一个包含二进制数据的 Blob 对象 。
  4. document
    response 是一个 HTML Document 或 XML XMLDocument,这取决于接收到的数据的 MIME 类型。请参阅 XMLHttpRequest 中的 HTML 以了解使用 XHR 获取 HTML 内容的更多信息。
  5. json
    response 是一个 JavaScript 对象。这个对象是通过将接收到的数据类型视为 JSON 解析得到的。
  6. text
    response 是一个以 DOMString 对象表示的文本。
  7. ms-stream
    response 是下载流的一部分;此响应类型仅允许下载请求,并且仅受 Internet Explorer支持。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值