zoukankan      html  css  js  c++  java
  • 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('uploadexcelexports\'.$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,文件成功下载。

  • 相关阅读:
    数组的反转和二维数组
    初识数组
    Python学习笔记-Day8
    Python学习笔记-Day7
    Python学习笔记-Day6
    Python学习笔记-Day5
    Python学习笔记-Day4
    Python学习笔记-Day3
    Python学习笔记-Day2
    Python学习笔记-Day1
  • 原文地址:https://www.cnblogs.com/cyclzdblog/p/7670695.html
Copyright © 2011-2022 走看看