我有一个api响应,返回一个xlsx文件作为响应。
api是触发按钮点击,我需要下载它作为响应。
每个API调用都经过一个服务,该服务处理附加令牌到url以进行身份验证。也就是说我不能使用这里提到的方法。我得到的响应是这样的(调试后的响应)。我试过了
a.href = window.URL.createObjectURL(response)
和
a.href = window.URL.createObjectURL(new blob([response]))
并尝试下载,但电子表格已损坏(我知道文件是好的,因为swagger返回文件正确)。
我如何得到这个文件,在swagger像这样,以便我可以下载在a.click()
。
这是我的API从。net
提前谢谢你。
您可以尝试使用FileSaver.js
库下载该文件。
下面是示例代码:
import FileSaver from 'file-saver';
// Call your API to get the response
axios.get('/PrintWorkSheet', { responseType: 'arraybuffer' }).then((response) =>
{
//Create a Blob object from the response data
const blob = new Blob([response.data], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });
// Use FileSaver.js to save the Blob as a file
FileSaver.saveAs(blob, 'WorkSheet.xlsx');
})
.catch((error) => {
console.log(error);
});
问题出在axios实例上。
我已经在请求头中添加了响应类型,问题解决了。
responseType: "blob",
这是根本原因。之后,我能够下载文件,并在评论中由'Klian'提供了对我的问题的回应。