我有像这样的 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(数据)中,我看到了文件的内容。感谢您的帮助。
答案 0 :(得分:-1)
Laravel提供开箱即用的响应类型下载。官方文件指出:
下载方法可用于生成强制用户浏览器在给定路径下载文件的响应。下载方法接受文件名作为方法的第二个参数,这将确定下载文件的用户看到的文件名。最后,您可以将HTTP标头数组作为方法的第三个参数传递:
return response()->download($pathToFile);
//OR
return response()->download($pathToFile, $name, $headers);
所以你的load_file函数应该像这样响应要下载的文件,不需要为此添加jquery。