如何在Laravel中通过Ajax下载Excel文件?

How to download Excel file by Ajax in Laravel?

我用这个library导出Excel

我向端点发送 POST 请求,其中方法检索数据并创建文件:

return Excel::download(new EventsExport($request), $filename);

问题是我得到这个二进制文件作为响应,但浏览器没有开始下载它。

如何解决?

我认为正确的方法是将它存储在您的服务器上并发送 link 到您的 ajax 请求:

return response()->json([
    'url' => 'url-to-stored-file'
]);

并且在 AJAX 响应中你可以这样做:

function(data) {
    window.location.href = data.url;
}

我知道这不是更好的方法,但它有效

如果您将请求作为来自 SPA 的 AJAX 请求,则下载不会开始。您需要让端点接受 GET 请求和 link 用户 URL 或向您的 SPA 应用程序嵌入一个表单,该表单将对端点执行正常 POST。

我对angular一无所知,但如果你在laravel,你可以,

向您的控制器调用 ajax 请求

然后用您的数据创建一个 excel 临时文件。

然后只需通过此 header 下载即可。

header('Content-Type: text/csv'); echo file_get_contents('your_file_location_url');

如果需要,请取消链接您的临时文件

经过一番努力,这是我找到的最简单的解决方案

您的控制器

return Excel::download(new EventsExport($request), $filename, null, [\Maatwebsite\Excel\Excel::XLS] );

你的前端

 var data = match=3&win=false; //example
 var url = "{{route($routeForYourExcel)}}?" + data;
 window.open(url, '_blank');

希望对您有所帮助

$.ajax({
     type : 'GET',
     url : '/download-excel',
     success:function(){
         window.location.href = '/download-excel';
     }
});