2016-07-23 4 views
0

Я создал проект laravel, где пользователи могут загружать изображения. Я протестировал проект на локальном сервере и не нашел ничего плохого. После загрузки проекта на рабочий сервер я обнаружил, что когда пользователь пытается загрузить изображения размером более 1,5 МБ, он показывает ошибку TokenMismatchException in VerifyCsrfToken.php line 67, хотя у меня есть csrf токен в моей форме. После нескольких поисков я обнаружил, что некоторые люди предлагают изменить две вещи в файле php.ini и перезапустить сервер nginx. Поэтому я изменил post_max_size = 40Mupload_max_filesize = 40M, а также изменил max_execution_time = 0, что означает неограниченное время выполнения. Затем я запустил эту команду sudo service nginx restart и php artisan up и попытался загрузить изображение размером 21 МБ. Когда я нажал кнопку отправки, потребовалось некоторое время, чтобы загрузить изображение и в итоге выбросило исключение несоответствия токенов. Я использую ubuntu 16.04 для локальных тестов. Любое решение этой проблемы, пожалуйста? Я делюсь коды: вид:Настройки php на локальном или производственном сервере (laravel)

{!! Form::open(['url'=> "pro/{$user->id}/upload",'files'=> 'true', 'class'=> 'form-horizontal']) !!} 

    <input id="filebutton" name="image" class="input-file" type="file"> 
    <input name="title" class="form-control" type="text" required=""> 
    <button type="submit" class="btn btn-danger btn-block btn-flat">Upload</button> 
    {!! Form::close() !!} 

контроллер:

public function save($id, PortfolioRequest $request) 
    { 
    $pro = User::findOrFail($id); 
    $file = $request->file('image'); 
    $original_path = public_path('uploads/portfolio/original/'); 

    $file_name = str_random(64).'_'.$request->title.'_user_'. $pro->id . '.' . $file->getClientOriginalExtension(); 

    Image::make($file) 
      ->resize(750,null,function ($constraint) { 
       $constraint->aspectRatio(); 
       }) 
      ->save($original_path . $file_name); 


    $portfolio = Portfolio::create([ 
     'user_id' => $id, 
     'image' => $file_name, 
     'title' => $request->title 
    ]); 

    return redirect("pro/{$id}/portfolio"); 
    } 

генерируемая форма:

<form method="POST" action="www.xxxx.com/pro/3/upload" accept-charset="UTF-8" class="form-horizontal" enctype="multipart/form-data"><input name="_token" type="hidden" value="EsH8KaSSoXovzjZ0RnWWi7eEwNWNgYlBVRm7yUYr"> 
+0

Сгенерированная форма html, как выглядит маркер? –

+0

@MartinHenriksen Я добавил, что –

+0

Перед тем, как опытные сеансы испортили и создали новый сеанс в ответ на сообщение, и поэтому токены не совпадают. –

ответ

0

Попробуйте добавить это к вашему <header>:

<meta name="csrf-token" content="{{ csrf_token() }}" /> 
Смежные вопросы