...responseType为'blob'或'arraybuffer'下载时如何正确处理返回值_百 ...
发布网友
发布时间:21小时前
我来回答
共1个回答
热心网友
时间:13小时前
在使用axios请求时,设置 responseType 为 'arraybuffer' 或 'blob' 下载文件时,关键在于正确处理返回值以确保成功或失败的响应得到恰当的响应。
当设置 responseType 为 'arraybuffer' 时,假设请求成功,后端会返回文件流。在正常情况下,用户可以直接导出此文件流。然而,如果请求失败,后端可能会返回一个 JSON 对象,例如 `{ "status": "false", "code": "500", "msg": "操作失败" }`,尽管返回的 HTTP 状态码为 200。
由于请求成功和失败返回的 HTTP 状态码相同,仅通过 HTTP 状态码区分成功与失败变得困难。因此,需要在接收响应数据时检查其类型。若数据为 arraybuffer,则需要将 arraybuffer 转换回 JSON 对象,然后进行相应的判断。
实现这一转换的过程,可以使用 JavaScript 的 `JSON.parse()` 方法配合 `ArrayBuffer` 的 `slice()` 方法。首先将 arraybuffer 转换为字符串,再将字符串转换为 JSON 对象。具体代码如下:
javascript
axios.get(url, { responseType: 'arraybuffer' })
.then(response => {
// 将 arraybuffer 转换为字符串
const arrayBuffer = response.data;
const arrayBufferView = new Uint8Array(arrayBuffer);
const string = new TextDecoder('utf-8').decode(arrayBufferView);
const json = JSON.parse(string);
// 根据 json 对象的 status、code、msg 等字段判断请求结果
if (json.status === "false" && json.code === "500") {
console.log("操作失败");
} else {
// 正常处理文件流
}
})
.catch(error => {
// 处理请求失败的情况
});
通过这样的实现,可以确保无论是请求成功还是失败,都能正确地处理返回值,从而为用户提供准确的反馈或执行相应的处理逻辑。