Laravel $ .post下载文件?

时间:2016-02-25 18:21:05

标签: laravel laravel-5

我有像这样的 view.blade.php

....
<meta name="_token" content="{!! csrf_token() !!}" />
....
<script>
jQuery(document).ready(function ($) {
    $.ajaxSetup({
        headers: {'X-CSRF-Token': $('meta[name="_token"]').attr('content')}
    });
    $.post('/download_file', {file_name: "abc"}, function (data) {
        console.log(data);
    });
});
</script>

routes.php 中,我已设置路线

Route::post('/download_file' , 'DownloadController@load_file');

DownloadController.php 中,我为此创建和下载文件编写代码

<?php
namespace App\Http\Controllers;

use Response;
use File;
use Illuminate\Http\Request;

class DownloadController extends Controller {

    public function load_file(Request $request){
        if($request->file_name === "abc"){
            File::put("files/abc.txt", "This is content in txt file");
            $file_abc = public_path() . "/files/abc.txt";
            return Response::download($file_abc);
        }
    }

}

文件 abc.txt 是在服务器上创建的,但浏览器不会在 $。发布调用后下载它。在console.log(数据)中,我看到了文件的内容。感谢您的帮助。

1 个答案:

答案 0 :(得分:-1)

Laravel提供开箱即用的响应类型下载。官方文件指出:

  

下载方法可用于生成强制用户浏览器在给定路径下载文件的响应。下载方法接受文件名作为方法的第二个参数,这将确定下载文件的用户看到的文件名。最后,您可以将HTTP标头数组作为方法的第三个参数传递:

return response()->download($pathToFile);

//OR

return response()->download($pathToFile, $name, $headers);

所以你的load_file函数应该像这样响应要下载的文件,不需要为此添加jquery。