Laravel 中前端使用 Bootstrap-fileinput 上传文件,提示:CSRF token mismatch,很明显是 CSRF 校验错误,解决办法如下:

首先在表单内添加下面代码,这将使用 laravel 的 csrf_token() 函数在表单上添加一个 csrf 令牌字段

<input type="hidden" id="csrf_token" name="_token" value="{{ csrf_token() }}">

或者直接使用:

@scrf

注意:如果你没用到 Bootstrap-fileinput 仅仅是 Laravel 程序提示:CSRF token mismatch.那么,到此问题就解决了。

然后设置 bootstrap-fileinput 插件的 ajax 请求的额外 post 参数:uploadExtraData :

uploadExtraData:{'_token':$("#csrf_token").val()},

详细代码如下:

$("#input-id").fileinput({
  maxFileSize: 264000,
  uploadUrl: "{{url('/rate/uploadfile')}}",
  uploadAsync: true,
  uploadExtraData:{'_token':$('#csrf_token').val()},
  allowedFileExtensions: ['mp3', 'mp4', 'mpeg', 'flv'],
  maxFileCount: 1,
  showUpload: true,
  dropZoneEnabled: false
});