2013-11-16 5 views
2

Я использую Laravel 4 и в форме электронной почты, где я разрешаю пользователям добавлять вложения, я получаю ошибку несоответствия токенов, когда пытаюсь отправить файл, который выходит за рамки post_max_size, установленный в моем php.ini. Я ставлю эти строки в CSRF фильтр, чтобы попытаться отлаживать:Несоответствие маркера Laravel при загрузке слишком большого файла

Log::debug(Session::token()); 
Log::debug(print_r($_POST, true)); 
Log::debug(Input::get('_token')); 
Log::debug(Session::token() != Input::get('_token')); 

Как и следовало ожидать, $ _POST был пуст, поэтому маркер сеанса всегда получать по сравнению с нулем. Но есть ли способ изящно позволить пользователю узнать, что файл слишком велик, а не бросает эту ошибку?

Я также использую валидатор javascript, но я не хочу полагаться исключительно на javascript, чтобы избежать этой ошибки.

ответ

2

Я понимаю, что это старый вопрос, но я наткнулся на него, и я не мог найти ничего, объясняющего решение этой проблемы. Итак, я решил, что опубликую свое решение.

Я использую Laravel 4.1 и в приложении/filters.php я изменил Route :: фильтр ('CSRF'() функцию для этого:.

Route::filter('csrf', function() 
{ 
    if (Session::token() != Input::get('_token')) 
    { 
     if (empty($_POST)) { 
      $post_size = trim(ini_get('post_max_size')); 
      $post_size = substr($post_size, 0, -1); 
      $post_size = ($post_size * 1024) * 1024; 

      if ($post_size < Request::header('Content-Length')) { 
       $validator = Validator::make(Input::all(), []); 

       $messages = $validator->errors(); 
       $messages->add('file size', 'Files Cannot Exceed ' . ini_get('upload_max_filesize')); 

       return Redirect::back()->withErrors($messages); 
      } 
     } 

     throw new Illuminate\Session\TokenMismatchException; 
    } 
}); 

Очевидно другие вещи, кроме просто слишком большой изображение может привести к Content-Length для переполнения, но это очень маловероятно, поэтому я решил, что это будет разумный риск.

2

Проверить ссылку ниже, по-видимому, проблема вызвана превышением максимального размера загрузки .. solved

Смежные вопросы