0 Câu hỏi: Tệp XLSX bị hỏng sau khi tải xuống qua axios

câu hỏi được tạo ra tại Wed, May 8, 2019 12:00 AM

Tôi cố gắng tạo tệp XLSX trong ứng dụng Vue có axios. Tôi làm điều này:

Đầu tiên tôi gửi cuộc gọi bài đến bộ điều khiển phụ trợ:

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

Sau đó, vào phần phụ trợ, tôi thực hiện một số điều, tạo tệp xlsx và lưu nó trên máy chủ. Tập tin này là tốt và tôi khi tôi kiểm tra nó, tôi có thể mở nó trong excel. Bây giờ tôi muốn tệp này được trình duyệt tự động tải xuống, vì vậy, trong trình điều khiển của tôi, tôi thực hiện điều này (tệp $là đường dẫn đến tệp xlsx đã tạo trên máy chủ):

$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);

Phản hồi trông như thế này: https://d.pr/i/UndMRn Trên Phía JS tôi làm điều này với phản hồi:

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();

Tệp được tải xuống bị hỏng và không thể mở bằng Excel. Tôi đã thử một số thứ, bao gồm thay đổi loại từ vnd.ms-excel thành application/vnd.openxmlformats-officedocument.spreadsheetml.sheetresponseType từ blob thành arraybuffer.

Ai cũng có giải pháp?

    
0
0 Câu trả lời                              0                         
nguồn đặt đây