Я пытаюсь создать файл XLSX в приложении Vue с помощью axios. Я делаю это:
Сначала я отправляю почтовый звонок бэкэнд-контролеру:
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
и responseType
с blob
на arraybuffer
. Ни один с успехом.
У кого-нибудь есть решение?