2016-06-13 5 views
0

사진을 업로드 할 Laravel 5.2 코드를 작성하고 싶습니다. 한 번에 여러 사진을 업로드하기 시작하면 문제가 생깁니다.Laravel 5.2 TokenMismatchException

그것은 나에게 오류를 제공합니다 VerifyCsrfToken.php 라인 67 TokenMismatchException을 다음 {{csrf_field()}} 형태에서 누락 된 경우

이 오류는 표시해야하지만,이 경우는 외설 ' 그게 바로 거기에요.

적은 이미지로도 완벽하게 작동합니다. 무엇이 문제 일 수 있습니까? 이 {{ csrf_field() }}을 필요가 없습니다

컨트롤러

public function store(Request $request) 
{ 
    $rules = array(
     'picturess' => 'mimes:jpeg,jpg,bmp,png', 
    ); 
    $messages = array(
     'mimes' => 'A feltöltetni kívánt kép nem felel meg a kritériumoknak. (Ilyen lehet a kép kiterjesztése: jpeg, jpg, bmp vagy png. A kép se lehet bármekkora.)', 
     'integer' => 'A beírt szőveg nem szám.', 
     'required' => 'Ennek a mezőnek a kitőltése kötelező.', 
    ); 
    $validator = Validator::make(Input::all(), $rules, $messages); 
    if ($validator->fails()) { 
     $messages = $validator->messages(); 
     return Redirect::back()->withInput()->withErrors($validator); 

    } 
    if (Input::hasFile('pictures')) { 
     $files = $request::file('pictures'); 
     $file_count = count($files); 
     $uploadcount = 0; 
     $destinationPath = 'uploads'; 
     $userId = Auth::user()->id; 
     foreach ($files as $file) { 
      if ($file->isValid()) { 
       $extension = $file->getClientOriginalExtension(); 

       $pictureFileName = $this->makePictureFileName(0, $extension); 
       $thumbnailPictureFileName = $this->makePictureFileName(1, $extension); 
       Log::info('pictureFileName: '.$pictureFileName); 

       if ($file->move($destinationPath, $pictureFileName)) { 
        $uploadcount++; 
        $img = Image::make($destinationPath . '/' . $pictureFileName); 
        //$img = Image::make($file->getClientOriginalName()); 
        $img->resize(277, null, function ($constraint) { 
         $constraint->aspectRatio(); 
        }); 
        $img->save($destinationPath . '/' . $thumbnailPictureFileName); 
        $picture = new Picture; 
        $picture->filename = $pictureFileName; 
        $picture->thumbnail_filename = $thumbnailPictureFileName; 
        $picture->user_id = $userId; 
        $picture->save(); 
       } 

      } else { 
       Session::flash('picture-error', 'A feltöltetni kívánt kép nem megfelelő. (Valószínűleg túl nagy.)'); 
       return redirect()->back()->withInput()->withErrors($validator); 
      } 
     } 
     if ($uploadcount == $file_count) { 
      Session::flash('success', 'A képek feltöltése sikeres.'); 
     } else { 
      return redirect()->back()->withInput()->withErrors($validator); 
     } 
    } 
    //return Redirect::to('pictures/create'); 
    return redirect()->back()->withInput()->withErrors($validator); 
} 

보기

@extends('layouts.site') 

@section('content') 
    <div class="row"> 
     <div class="col-md-12"> 

      {!! Form::open(array('method' =>'POST', 'url' => 'pictures', 'class' => 'uk-form', 'files'=> true)) !!} 
      {{ csrf_field() }} 


       <div class="form-group"> 
        {!! Form::label('pictures', 'Kép', array('class' => '')) !!} 
        <div class="uk-form-controls"> 
         {!! Form::file('pictures[]', array('class' => '','multiple'=>true)) !!} 
        </div> 
       </div> 

       <div class="form-group"> 
        <button class="uk-button">Küldés</button> 
       </div> 


      @if ($errors->has('success')) 
       <div class="alert alert-danger" role="alert"> 
        <p>{{ $errors->first('success') }}</p> 
       </div> 
      @endif 
      @if(Session::has('picture-error')) 
       <div class="alert alert-danger" role="alert"> 
        <p class="errors">{!! Session::get('error') !!}</p> 
       </div> 
      @endif 
      @if (count($errors) > 0) 
       <div class="alert alert-danger"> 
        <ul> 
         @foreach ($errors->all() as $error) 
          <li>{{ $error }}</li> 
         @endforeach 
        </ul> 
       </div> 
      @endif 
      {!! Form::close() !!} 

     </div> 
    </div> 
@stop 

경로는

Route::group(['middleware' => ['web']], function() { 
    Route::get('/', '[email protected]'); 
    Route::get('admin', '[email protected]'); 
    Route::resource('pictures', 'PicturesController'); 
    Route::resource('users', 'UsersController'); 
    Route::auth(); 
}); 
+0

성공적으로 이미지를 업로드하면 사용자를 어디로 리디렉션합니까? 세션에 대한 성공 메시지를 깜박이는 것처럼 보이지만 입력으로 다시 리디렉션되는 것처럼 보입니다. 이미 토큰이 "사용"되었기 때문에 토큰이 오류를 생성 할 것이므로 새로운 토큰을 만들어 오류를 피하는 새로운 인스턴스로 라우트로 전송하려고 할 수 있습니다. – camelCase

+0

나는 비슷한 문제가있다. 나는 무엇이 잘못되었는지 파악하지 못했습니다. http://stackoverflow.com/questions/37717449/how-to-resolve-tokenmismatchexception-in-laravel-5-app –

+0

이 코드를 사용하여 사용자를 리디렉션하는 경우 redirect ('pictures/create'); 제대로 작동해야합니까? 그것은 같기 때문에 실제로 작동하지 않습니다. –

답변

2

{!! Form::open... 자동으로 CSRF 필드 보호를 추가합니다.

+0

도움을 주셔서 감사합니다. 감사합니다. –

+1

@FerencStraub 기꺼이 도와 드리겠습니다. 문제가 해결 되었다면 답을 올바른 것으로 표시하십시오. – TheFallen