【问题标题】:Laravel Excel Download using ControllerLaravel Excel 使用控制器下载
【发布时间】:2015-08-04 11:44:38
【问题描述】:

所以我创建了一个 PHP 控制器来处理由 JS 发布的导出数据。问题是我可以看到它在控制台中创建了一些东西,但文件下载永远不会开始。我尝试使用 ->store (laravel excel) 并将其保存在导出文件夹中,但当我尝试使用时再次尝试使用

return \Response::download($result);

它仍然不会开始下载。我遇到的问题只是开始下载。

角度控制器

$scope.exportMatrix = function () {
    var postData = {list: $scope.list, matrix: $scope.matrix};
    $http({
        method: 'POST',
        url: '/export',
        dataType: 'obj',
        data: postData,
        headers: {'Content-Type': 'application/x-www-form-urlencoded'}
    }).success(function (data) {
        console.log(data);
    }).error(function (data) {
        console.log("failed");
    });
}

路线

Route::post('/export', 'ExportController@export');

PHP 控制器

<?php namespace App\Http\Controllers;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App;
use Excel;
use Response;
class ExportController extends Controller {

public function export()
{

    $excel = App::make('excel');

    Excel::create('Test', function($excel) {
        $excel->setTitle('new awesome title');

        $excel->sheet('Sheet', function($sheet) {
            $sheet->fromArray(array(
                array('data1', 'data2'),
                array('data3', 'data4')
            ));
        });


    })->export('xlsx');
}

【问题讨论】:

  • 不是download('xlsx') 不是export
  • 我忘了提到我尝试下载('xlsx')以及导出这从我的 JS 控制器成功中抛出了一堆“QĿi!��K�y3�J
  • 好吧,我很确定这是因为我将响应发送回 javascript 控制器,然后下载需要由 JS 启动(例如使用 new Blob([data], {type : 'application/xls'});) 所以我想我的后续问题是如何使用 laravel/excel 和角度数据创建一个有效的导出控制器。因为它似乎使事情变得比他们需要的复杂得多。我想将角度数据发送到导出控制器并使用 laravel excel 创建和下载它。
  • 这个问题你解决了吗?我也有同样的问题。

标签: php angularjs laravel export laravel-excel


【解决方案1】:

最后我使用FileSaver.js 下载了它发回的 blob,所以只需加载 FileSaver 并使用它 saveAs(blob)。

$http({
   method: 'POST',
   url: '/api/v1/download',
   dataType: 'json',
   data: {
       data:data
   },
   responseType: 'arraybuffer',
   headers: {'Content-Type': 'application/x-www-form-urlencoded'}
}).success(function (data) {
   var blob = new Blob([data], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"});

   saveAs(blob, title + ".xlsx");
}).error(function (data) {
   console.log("failed");
});

我确定使用

responseType: 数组缓冲区

和另存为类型:

"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"

因为原因。

【讨论】:

  • 响应类型真的帮了我
【解决方案2】:

Route::get('/export', 'ExportController@export');

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-09
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多