Laravel Excel 下载不工作

Laravel Excel download not working

问题和这里描述的一样

但我无法相信没有不使用其他资源就可以处理 Laravel 中的 Excel 下载的方法。我已经能够在控制器中使用 response() 处理 PDF 的即时下载。

也许 headers 错了?我的代码:

public function getFile($file) {
    $path = storage_path('app/excel/exports/' . $file);

    $headers = array('Content-Type' => File::mimeType($path));

    return response()->download($path, $file, $headers);
}

因此 excel 文件已创建并正确保存在我的存储文件夹中(发生在上面的代码之前)。然后我使用axios.get方法下载具有上述功能的文件。

Headers 我得到:

Accept-Ranges:bytes Cache-Control:public Connection:keep-alive Content-Disposition:attachment; filename="test_file.xlsx" Content-Length:7066 Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet

但是无论我做什么或尝试更改下载都不会开始。

你可以试试这两个headers。

return response()->download($path, $file, [
     'Content-Type' => 'application/vnd.ms-excel',
     'Content-Disposition' => "attachment; filename='Report.xls'"
]);

谢谢,

我设法解决了。

似乎无法通过对路由的简单 axios.get 请求来解决此问题。相反,我需要直接使用 link 打开路由。

不适用于:

HTML <button @click="downloadExcel()">Download Table as Excel File</button>

downloadExcel() {
    axios.get('/customers/export');
}

简单的解决方案(而不是仅仅使用 axios.get):

<a :href="/customers/export"><button>Download Table as Excel File</button></a>

所以也可以在axios请求后打开路由:

downloadExcel() {
    let newWindow = window.open();
    axios.get('/customers/export')
       .then(response => {
         newWindow.location = 'http://' + window.location.hostname + '/customers/export';
       });
}