[英]How to download Excel file by Ajax in Laravel?
我使用这个库来导出 Excel
我向端点发送 POST 请求,其中方法检索数据并创建文件:
return Excel::download(new EventsExport($request), $filename);
问题是我将此文件作为二进制文件作为响应,而浏览器没有开始下载它。
如何解决?
如果您将请求作为来自 SPA 的 AJAX 请求发出,则下载将不会开始。 您需要让端点接受 GET 请求并将用户链接到该 URL,或者将表单嵌入到您的 SPA 应用程序中,该表单将对端点执行正常的 POST。
我对 angular 一无所知,但如果你在 laravel 中,你可以,
向您的控制器调用 ajax 请求
然后用您的数据创建一个临时的 excel 文件。
然后只需通过此标题下载它。
header('Content-Type: text/csv'); echo file_get_contents('your_file_location_url');
如果您愿意,请取消链接您的临时文件
我认为正确的方法是将它存储在您的服务器上并将链接发送到您的 ajax 请求:
return response()->json([
'url' => 'url-to-stored-file'
]);
在 AJAX 响应中,您可以执行以下操作:
function(data) {
window.location.href = data.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';
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.