【问题标题】:How to download Excel file by Ajax in Laravel?如何在 Laravel 中通过 Ajax 下载 Excel 文件?
【发布时间】:2019-04-01 19:58:15
【问题描述】:

我用这个library导出Excel

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

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

问题是我将此文件作为二进制文件作为响应,而浏览器没有开始下载它。

如何解决?

【问题讨论】:

  • 您是否设置了标题以使用正确的 CSV 标题?
  • 当然,我认为客户端有问题,如何使用 Angular 下载文件
  • 如果您使用 Angular,您应该将其添加为标签,并包含 Angular 相关代码。您只发布了有关 Laravel 方面的内容。

标签: angular laravel laravel-5 maatwebsite-excel


【解决方案1】:

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

向您的控制器调用 ajax 请求

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

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

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

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

【讨论】:

    【解决方案2】:

    如果您从 SPA 以 AJAX 请求的形式发出请求,下载将不会开始。您需要让端点接受 GET 请求并将用户链接到该 URL,或者将表单嵌入到您的 SPA 应用程序中,该表单将对端点进行正常的 POST。

    【讨论】:

      【解决方案3】:

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

      您的控制器

      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】:

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

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

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

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

        我知道这不是最好的方法,但它确实有效

        【讨论】:

        • 我认为这不能回答 OP 的问题。他们想要下载 Excel 文件,而不是在响应中发送 JSON。
        • 是的,客户端发送了哪些标头?
        • 我认为你不需要任何额外的标题。为此,您只需要获取 json 响应并将您的窗口 url 导航到它
        • 我得到的文件路径如下:C:\Projects\events\Backend\storage\app/events/1.xls
        • 如果将其传递给浏览器 url,它将开始下载。但它在代码中不起作用
        【解决方案5】:
        $.ajax({
             type : 'GET',
             url : '/download-excel',
             success:function(){
                 window.location.href = '/download-excel';
             }
        });
        

        【讨论】:

        • 请在您的答案中包含对代码的解释。
        • 虽然此代码可能会解决问题,including an explanation 关于如何以及为什么解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提出问题的人。请edit您的回答添加解释并说明适用的限制和假设。
        猜你喜欢
        • 2018-10-27
        • 2013-05-16
        • 2017-11-03
        • 2011-10-16
        • 1970-01-01
        • 2016-07-08
        • 1970-01-01
        • 2014-12-23
        相关资源
        最近更新 更多