Поврежденный файл XLSX после загрузки через axios - PullRequest
0 голосов
/ 08 мая 2019

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

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

1 Ответ

0 голосов
/ 31 мая 2019

Причина в том, что POST не принимает responseType. Поэтому мне сначала нужно было сделать вызов POST, а затем запрос GET, чтобы получить и создать файл.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...