簡體   English   中英

通過axios下載后損壞的XLSX文件

[英]Corrupt XLSX file after download via axios

我嘗試在帶有axios的Vue應用程序中創建XLSX文件。 我這樣做:

首先,我向后端控制器發送一個帖子調用:

return axios({
            url: '/backend/article/exportApi',
            method: 'POST',
            reponseType: 'blob',
            headers: {
                'Accept': 'vnd.ms-excel'
            },
            data: {headers: headers, articles: articles}
        });

然后在后端我做一些事情,創建一個xlsx文件並將其保存在服務器上。 這個文件很好,當我檢查它時,我可以在excel中打開它。 現在我希望瀏覽器自動下載這個文件,所以在我的控制器中我這樣做($ file是服務器上創建的xlsx文件的路徑):

$response = $this->Response();
$response->setHeader('Cache-Control', 'public');
$response->setHeader('Content-Description', 'File Transfer');
$response->setHeader('Content-disposition', 'attachment; filename="export.xlsx"');
$response->setHeader('Content-Type', 'application/vnd.ms-excel');
$response->setHeader('Content-Transfer-Encoding', 'binary');
$response->setHeader('Content-Length', filesize($file));
$response->sendHeaders();

echo readfile($file);

響應如下所示: https//d.pr/i/UndMRn在JS方面,我使用響應執行此操作:

let blob = new Blob([response.data], {type: 'vnd.ms-excel;charset=utf-8'});
let link = document.createElement('a');
link.href = window.URL.createObjectURL(blob);
link.download = 'export.xlsx';
link.click();

下載的文件已損壞,無法通過Excel打開。 我嘗試了幾種方法,包括將類型從vnd.ms-excel更改為application/vnd.openxmlformats-officedocument.spreadsheetml.sheet ,將responseTypeblob更改為arraybuffer 沒有成功。

有人有解決方案嗎?

原因是POST不接受responseType。 所以我需要先進行POST調用,然后再進行GET請求以檢索並創建文件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM