【问题标题】:How can I trigger an excel download drectly with laravel excel via an ajax如何通过ajax直接使用laravel excel触发excel下载
【发布时间】:2017-11-03 16:28:03
【问题描述】:

我们的应用程序通过 ajax 向服务器发送 post 参数以生成数据,将其格式化为 excel,然后触发下载创建的 excel。

我们之前使用 phpexcel 进行过此操作,将 excel 保存在 tmp 文件中,然后触发重定向到 excel 文件的路径。我们正在将我们的应用程序迁移到 laravel,但我们仍然以相同的方式执行此操作,使用 mmatwebsite laravel excel 提供程序,将 tmp 文件保存在 laravel 公共目录中,然后重定向到该位置。我们想直接下载这个而不把它保存在 tmp 中,但每次到达的只是网络窗口中的一些乱码输出。

这是怎么做到的,这甚至可能吗,我们注定要永远使用tmp文件下载吗?当前简单的excel函数:`public function ExportCible(Request $request) {

  $cible = Cible::filter($request->all())->get();
  $columns = explode(",", $request->columns);
  $titles = explode(",", $request->titles);


  ob_end_clean();
  ob_start();
  $filename = "ciblage_d".date("Ymd",time())."_h".date("His",time());

  Excel::create($filename, function($excel) use($cible,$columns, $titles){

    $excel->sheet('Excel sheet', function($sheet)use($cible,$columns, $titles) {
      $sheet->setOrientation('landscape');
      $sheet->loadView('excelTemplates.cible')->with('cible', $cible)->with('columns', $columns)->with('titles', $titles);
    });

  })->store('xlsx', public_path('exports'));

  return($filename.".xlsx");

}`

并在ajax端调用窗口位置触发下载。

exportData:function(url,data){
return $.ajax(url,{
    data: data,
    method: "POST",
    success: function(fileLink){
        window.location = Config.exportRoute + fileLink
    },
});

},

我在这里错过了什么。尝试了其他 laravel excel 方法,例如 ->export() 和 ->download()。以前在phpexcel中尝试过类似的方法。从来没有运气

【问题讨论】:

标签: php excel laravel maatwebsite-excel


【解决方案1】:

如果您坚持使用 ajax,请尝试在您的 API 中创建后返回 excel 文件 obj,

并尝试 ajax method: "GET"

另一种方式是给它设置一个临时路由,运行完成后销毁,所以你可以设置缓存什么的,以减少服务器的压力。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-27
    • 1970-01-01
    • 2011-10-16
    • 2018-02-28
    • 2013-05-16
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多