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

时间:2019-04-01 19:58:15

标签: angular laravel laravel-5 maatwebsite-excel

我使用此library导出Excel

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

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

问题是我以二进制形式获取此文件,并且浏览器无法开始下载它。

如何解决?

5 个答案:

答案 0 :(得分:1)

如果您是从SPA发出的AJAX请求,则下载将不会开始。您需要使端点接受GET请求并将用户链接到该URL,或者将表格嵌入到您的SPA应用中,以对端点进行常规POST。

答案 1 :(得分:1)

我对角球一无所知,但是如果您在laravel中可以,

调用ajax请求给您的控制器

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

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

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

然后根据需要取消链接临时文件

答案 2 :(得分:0)

我认为正确的方法是将其存储在服务器上并发送指向您的Ajax请求的链接:

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

在AJAX响应中,您可以执行以下操作:

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

我知道这不是最好的方法,但是它可以工作

答案 3 :(得分:0)

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

您的控制器

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

希望有帮助

答案 4 :(得分:0)

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