ajax(post請求)請求實現導出excel(laravel5.1,laravel Excel)


前言:原來一直使用的get方法導出excel,但是get方法攜帶的數據量有限,遂嘗試使用post方法實現。

1. 先使用composer安裝laravel的excel擴展包Laravel Excel ,附上github地址,以及官網地址。

https://github.com/Maatwebsite/Laravel-Excel  (readme文件有詳細的安裝教程)
http://www.maatwebsite.nl/laravel-excel/docs

2. 根據第一步配置好之后,便可以通過在類中引入use Excel 來輕松使用Laravel Excel

3. 正常情況下,如果我們使用get方法實現導出excel(代碼如下),直接使用export('xls')方法即可,(此處導出使用的是laravel Excel 提供的@Blade to Excel)

Excel::create('Filename', function($excel) {
  $excel->sheet('New sheet', function($sheet) {
        $sheet->loadView('folder.view');
    });
})->export('xls');

 但是當使用ajax來實現該方法時,執行到export處ajax會將export的文件當成數據返回(此處參考了網友的分析),從而我們在瀏覽器的開發者工具中只會看到一串亂碼,並不會執行下載,所以 我們需要先將生成的文件保存到服務器,

    然后返回一個鏈接,通過js的location.href跳轉即可實現文件導出

4. 要如何將生成的文件保存到服務器呢?對此,Laravel Excel為我們提供了一個store()方法,第一個參數為文件后綴名,第二個參數即為文件保存的路徑(其還有第三個參數此處沒用上,詳情自己官網查看文檔,介紹很詳細)。

Excel::create($new_file_name, function($excel)) {

   $excel->sheet('New sheet', function($sheet)) {
$sheet->loadView('folder.view');
   })->store('xls', public_path('upload/excel/exports'));

});

 如此便實現了文件保存,需要注意的是如果多次執行該方法並且文件名沒有改動,那么在保存的路徑下面后面生成的文件內容會覆蓋前面的文件,並不會自動在保存問一個新的文件。

5. 保存完了文件接下來要考慮的就是將下載文件的路由(即實現方法的鏈接)返回給前台,從而利用js實現文件下載。

public function DownloadFile ($file_name) {
    $file = public_path('upload\excel\exports\\'.$file_name.'.xls');

    return response()->download($file);
}

   上面為實現文件下載的方法(laravel自帶),只需要返回實現該方法的路由即可,路由如下,並且我給路由命名為download。

Route::get('/report/downloadfile/{file}', 'ReportController@DownloadFile')->name('download');

6. 最后我們只需要在第4步的代碼下面加上(只需將路由返回即可,怎么寫自己高興就好);這樣我們后台的所有操作便都完成了。

$res['data'] = route('download', ['file' => $new_file_name]);
return $res;

7. ajax請求成功后直接執行,

location.href = data.data;

 ok,文件成功下載。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM