如何使用 axios 从 laravel 下载导出的 Excel?

アリ・*_*ディム 0 javascript laravel axios

我的后端代码如下,当我使用Laravel 的blade测试它时,它运行良好。但我无法在 React 前端中使用 Axios 执行相同的操作(请参阅下面的前端代码)。

return (new NewsExport())->download($filename);
Run Code Online (Sandbox Code Playgroud)

我以某种方式从另一个站点找到了一些解决方案:他们更改了后端代码,他们使用该Storage方法返回链接而不是文件。但我不想使用Storage,我想防止过度存储文件(以防前端用户快速单击下载按钮)。

我的问题是如何在前端axios中下载后端返回的文件?


我的前端代码(下面的代码成功下载了一个excel文件,但我认为该文件已损坏,因为当我使用Microsoft Excel测试它时无法打开它)

let response = await newsApi.exportNewsList(payload).then(response => {
    const url = window.URL.createObjectURL(new Blob([response.data]));
    const link = document.createElement('a');
    link.href = url;
    link.setAttribute('download', 'exc.xlsx'); //or any other extension
    document.body.appendChild(link);
    link.click();
});
Run Code Online (Sandbox Code Playgroud)

这是response.data我登录时的截图:

Ιησ*_*αυή 5

我认为您忘记在 api 选项中指定您的responseTypeas blob 。

const options = {
    method: 'POST',
    responseType: 'blob', <=== you need this one
    data: formData,
    url: '/yourApi',
};

return API.request(options);
Run Code Online (Sandbox Code Playgroud)