0 Поврежденный файл XLSX после загрузки через axios

вопрос создан в Wed, May 8, 2019 12:00 AM

Я пытаюсь создать файл 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. Ни один с успехом.

У кого-нибудь есть решение?

    
0
0 ответов                              0                         
источник размещен Вот