在我的react应用程序中,我使用以下方法下载一个使用axios的文件。
方法1:
axios.post('api/downloadMyFile', data, { responseType: 'blob' })
.then(blob=>{
const url = window.URL.createObjectURL(blob.data);
const a = document.createElement('a');
a.href = url;
a.download = "download.zip"
document.body.appendChild(a);
a.click();
window.URL.revokeObjectURL(url);
})
最初我使用的是“方法2”,但后来不得不改为“方法1”,原因如下:
Axios返回的response.data
是一个JSON字符串。因此,从该JSON创建Blob不会生成正确的对象。更多信息请参见我的上一个线程。
方法2:
axios.post('api/downloadMyFile',
data
).then((response) => {
console.log("Response testing ");
console.log(response.data);
}
我改用“方法一”后遇到的问题如下:
在某些情况下,webservice调用可以在response.data
中返回NOT AUTHORIZED
。但是由于在“方法1”中我告诉Axios以Blob的形式提供响应,所以我在console.log(blob)
中看到的是以下内容:
如果我一直在使用“方法2”,并且有NOT_AUTHORIZED
的场景,我会在console.log(response)
中看到类似这样的内容:
Object { data: "NOT_AUTHORIZED: you are not allowed to download this file", status: 200, statusText: "", headers: {…}, config: {…}, request: XMLHttpRequest }
考虑到我使用的是方法1,我如何访问NOT_AUTHORIZED
相关信息?
1条答案
按热度按时间ux6nzvsh1#
后端应该返回一个特定的状态代码,如422,以标记此响应不是
ok
,并且有关错误的额外信息将在JSON中发送。在前端,您可以尝试将
response.data.text()
解析为JSON,然后读取errorCode或errorMessage以检测无法下载此文件的详细原因。下面是对我有效的示例代码: