【问题标题】:Laravel: TokenMismatchException after uploading large video fileLaravel:上传大视频文件后出现 TokenMismatchException
【发布时间】:2017-11-07 08:44:03
【问题描述】:

我已经设置了 php.ini (nginx)

upload_max_size = 100MB

post_max_size = 200mb

我正在尝试将 15mb 的视频上传到我的程序。起初我得到了这个错误。

VerifyCsrfToken.php 第 68 行中的 TokenMismatchException:

所以我在 VerifyCSRFToken 中间件的异常中添加了“/lesson/store”。

这是突出显示视频输入的简码:

<div class="form-group">
        <label class="control-label col-sm-2" for="video">Video:</label>
        <div class="col-sm-10">       

            <input class="form-control" type="file" accept="video/*" name="video" id="video" required>

        </div>
     </div> 

这是整个表单代码:

<form method="{{$method}}" action="{{url('')}}{{$action}}" class="form-horizontal"  runat="server"  enctype="multipart/form-data">

{{ csrf_field() }}

    <div class="form-group">
        <label class="control-label col-sm-2" for="title">Title:</label>
        <div class="col-sm-10">
          <input type="text" class="form-control" id="title" name="title"  placeholder="Enter title" required value="{{ $lesson->title or '' }}">
        </div>
     </div> 
     <div class="form-group">
        <label class="control-label col-sm-2" for="description">Description:</label>
        <div class="col-sm-10">
            <textarea class="form-control" id="description" name="description">{{ $lesson->description or '' }}</textarea>        
        </div>
     </div> 
     <div class="form-group">
        <label class="control-label col-sm-2" for="episode">Episode:</label>
        <div class="col-sm-10">
          <input type="number" class="form-control" id="episode" name="episode"  placeholder="" required value="{{ $lesson->episode or '' }}">
        </div>
     </div> 
     <div class="form-group">
        <label class="control-label col-sm-2" for="video">Video:</label>
        <div class="col-sm-10">

           @if( !empty( $lesson->video ) )
           <input class="form-control" type="file" accept="video/*" name="video" id="video">
           <div class="video">
            <video width="100%" style="height:200px" controls>
              <source src="{{url('uploads/courses/' . $lesson['course_id']. '/' . $lesson['video'])}}" type="video/mp4">      
            Your browser does not support the video tag.
            </video>
           </div>  
           @else
            <input class="form-control" type="file" accept="video/*" name="video" id="video" required>
           @endif
        </div>
     </div> 

     <div class="form-group">
        <label class="col-sm-2"></label>
        <div class="col-sm-10">
            <input type="submit" value="{{$button}}" class="btn btn-success">
            <a href="{{ url()->previous() }}" class="btn btn-danger">Cancel</a>
        </div>
     </div>


</form>

然后我尝试再次上传,我收到验证错误说:

视频字段为必填项

因为我的代码中有这个:

 $this->validate($request, [
   'video' => 'required|mimetypes:video/avi,video/mpeg,video/quicktime,video/mp4|max:40000'
      ]);

我真的不知道如何解决这个问题。

更新:我上传了 5mb 的视频,但出现了这个验证错误:

视频上传失败。

【问题讨论】:

  • 添加视频时向我们展示您在form 中的代码!
  • 除了 php.ini 之外,您是否还增加了 nginx 上的上传大小? (查看laracasts.com/discuss/channels/laravel/…
  • 我刚刚这样做了,仍然得到了 tokenmismatch 错误。
  • 上传小视频也会出现这种情况吗?试试看
  • 并发布此表单的路线,表单中要替换的 url 和方法是什么?

标签: php laravel nginx file-upload


【解决方案1】:

在您的验证 csrf 令牌中添加一个隐藏的输入字段

<input type="text" name="_token" hidden/>

{{ csrf_field() }}

【讨论】:

  • 我认为 {{ csrf_field() }} 就是这样做的。
  • 是的,两者都在做同样的事情
猜你喜欢
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 2015-10-20
相关资源
最近更新 更多