Подтвердить что ты не робот

Как проверить максимальный размер файла в Laravel?

Я пытаюсь проверить максимальный размер файла 500 КБ в Laravel:

$validator = Validator::make($request->all(), [
    'file' => 'size:500',
]);

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

Я попробовал это:

'file' => 'size:>=500'
'file'  => 'size:max:500'

Документация ничего не говорит об этом:

Размер: значение

Проверяемое поле должно иметь размер, соответствующий заданному значению. Для строковых данных значение соответствует количеству символов. Для числовых данных значение соответствует заданному целочисленному значению. Для файлов размер соответствует размеру файла в килобайтах.

4b9b3361

Ответ 1

Согласно документации:

$validator = Validator::make($request->all(), [
    'file' => 'max:500000',
]);

Значение находится в килобайтах. То есть max:10240= max 10 МБ.

Ответ 2

Изменение: Предупреждение! Этот ответ работал в моей среде XAMPP OsX, но когда я развернул его в AWS EC2, он НЕ предотвратил попытку загрузки.

Я хотел удалить этот ответ, так как он НЕПРАВИЛЬНЫЙ, но вместо этого я объясню, что меня смутило

Поле для загрузки моего файла называется "загрузить", поэтому я получил сообщение "Загрузка не удалась". Это сообщение приходит из этой строки в validation.php:

в ресурсах /lang/en/validaton.php:

'uploaded' => 'The :attribute failed to upload.',

И это сообщение отображается, когда размер файла превышает ограничение, установленное PHP.

Я хочу переопределить это сообщение, что вы обычно можете сделать, передав третий массив параметров $ messages в метод Validator :: make().

Однако я не могу этого сделать, поскольку я вызываю POST из компонента React, который отображает форму, содержащую поле csrf и поле загрузки.

Так что вместо этого я, как супер-хитрец, выбрал свой вид, отображающий сообщения, и заменил это конкретное сообщение своим дружеским сообщением "файл слишком большой".

Вот что работает, если размер файла меньше предельного размера файла PHP:

В случае, если кто-то еще использует класс Laravel FormRequest, вот что сработало для меня на Laravel 5.7:

Вот как я устанавливаю пользовательское сообщение об ошибке и максимальный размер файла:

У меня есть поле ввода <input type="file" name="upload">. Обратите внимание, что токен CSRF требуется также в форме (Google laravel csrf_field, что это значит).

<?php
namespace App\Http\Requests;
use Illuminate\Foundation\Http\FormRequest;
class Upload extends FormRequest
{
  ...
  ...
  public function rules() {
    return [
      'upload' => 'required|file|max:8192',
    ];
  }
  public function messages()
  {
    return [            
      'upload.required' => "You must use the 'Choose file' button to select which file you wish to upload",
      'upload.max' => "Maximum file size to upload is 8MB (8192 KB). If you are uploading a photo, try to reduce its resolution to make it under 8MB"
    ];
  }
}

Ответ 3

aaaaaaaaaa dcsdvc bhgrt trhrth ntntgn bfeb bfdbdfbfd