2017-06-02 167 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"

另一種方式是在操作完成後爲它設置一個臨時路由,所以你可以設置緩存或其他設置來減輕服務器的壓力。