Laravel 5.1,将模型导出到 csv 工作但不下载

这是我的控制器和方法的路线:


Route::post('exportarDireccionTodos','MyController@exportarDireccionTodos');


我正在使用 javascript 从单击按钮调用该路由:


$.ajax({

    url: baseUrl+'exportarDireccionTodos',

    type: 'POST',

    data: {'id': optionsChecked},

    success: function(response) {

        //etc

MyController 有这个代码:


$delimiter=";";

$array = MyModel::findMany($todos)->toArray();

$filename = "direcciones.csv";

header("Content-Transfer-Encoding: UTF-8");

header('Content-Type: application/csv');

header('Content-Disposition: attachment; filename="'.$filename.'";');


$f = fopen('php://output', 'wb');


foreach ($array as $line) {

    fputcsv($f, $line, $delimiter);

}

fclose($f)


return response()->json([

    'status' => 'success',

    'mensaje' => 'Direcciones exportadas a CSV'

]);

我将一些发送id到我的模型,然后我正在创建一个 csv 文件,但我无法下载它,我只是在开发人员工具 XHR 中看到它制作得很好,如下所示:

http://img.mukewang.com/60b98d9c0001e75610940206.jpg

我试过:


header('Content-Type: application/force-download');


header('Content-Type: text/csv');

与:


return Response::download($f, $filename, $headers);  <-- here I got an error, Laravel 5.1 doesnt reconigze Response

与:


return response()->download($f, $filename);

总是发生同样的情况,制作了 csv 但无法下载。我已经尝试了 2 种其他方法来创建 csv,但它始终生成良好但无法下载



智慧大石
浏览 131回答 2
2回答

慕的地10843

您在上次通话中缺少标题return response()->download($f, $filename, $headers);我在我的 Laravel 应用程序上使用这些标头来下载文件$headers = [&nbsp; &nbsp; &nbsp; &nbsp; 'Content-Type' => 'application/csv',&nbsp; &nbsp; &nbsp; &nbsp; "Content-Description" => "File Transfer",&nbsp; &nbsp; &nbsp; &nbsp; "Cache-Control" => "public",&nbsp; &nbsp; &nbsp; &nbsp; 'Content-Disposition' => 'attachment; filename="'.$filename.'"',];您可能有更好的运气临时存储文件并生成一个 URL 以从中下载$fs = Storage::disk('local')->temporaryUrl($path, now()->addMinutes(5));
打开App,查看更多内容
随时随地看视频慕课网APP