3

そこで、JS によって投稿されたデータのエクスポートを処理する PHP コントローラーを作成しました。問題は、コンソールに何かが作成されるのを見ることができますが、ファイルのダウンロードが開始されないことです。->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');
}
4

2 に答える 2

4

最後に、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: 配列バッファ

および saveAs タイプ:

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

理由があるからです。

于 2017-04-08T09:54:02.653 に答える