2017-06-02 164 views
1

我们的应用程序通过ajax发送post参数到服务器,以便生成数据,格式化为excel,然后触发下载创建的excel。如何通过ajax直接触发excel下载laravel excel

我们以前用phpexcel做过,将excel保存在tmp文件中,然后触发重定向到excel文件的路径。我们正在将应用程序迁移到laravel,但我们仍然以相同的方式使用mmatwebsite laravel excel提供程序,在laravel公共目录中保存一个tmp文件,并将其重定向到该位置。我们要直接下载该文件而不保存在tmp中,但是每一个到达的东西都是网络窗口中的一些乱码输出。

这是怎么做到的,这甚至是可能的,我们是否注定要使用tmp文件下载forver?目前简单的Excel功能:`公共职能ExportCible(请求$要求){

$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"); 

}`

而且在阿贾克斯与窗口位置的呼叫,触发下载。

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

},

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

+0

看看这个https://mattstauffer.co/blog/export-an-eloquent-collection-to-a-csv-with-league-csv – Michel

回答

0

如果妳坚持使用AJAX,试图返回Excel文件OBJ您的API在创建之后,

,并尝试AJAX method: "GET"

另一种方式是在操作完成后为它设置一个临时路由,所以你可以设置缓存或其他设置来减轻服务器的压力。