原因:前端因为下载字节流需要设置responseType: “blob”,如果请求失败时返回正常对象错误也会被设置为blob,无法读取正常的错误信息
解决方法:兼容请求成功时获取到 blob 和 请求失败时拿到接口返回的 json 错误信息。
使用 FileReader对象
// 将以下内容放到点击事件中 requestName 为已经设置responseType: "blob"的请求方法
requestName(row).then(res => {
// 创建FileReader对象
let fileReader = new FileReader();
// 读取操作完成时触发判断
fileReader.onload = (event) => {
try {
let jsonData = JSON.parse(event.target.result);
// JSON.parse 转换成功,说明是普通对象信息,拿到错误信息
message.error(jsonData?.message);
} catch (err) {
// JSON.parse 转换失败,说明是正常的字节流
let elink = document.createElement("a");
// 设置下载文件名
elink.download = 'license.zip';
elink.style.display = "none";
let blob = new Blob([res]);
elink.href = URL.createObjectURL(blob);
document.body.appendChild(elink);
elink.click();
document.body.removeChild(elink);
}
};
// 读取httpRequest返回的blob内容
fileReader.readAsText(res);
})