Ответ 1
Согласно документации:
$validator = Validator::make($request->all(), [
'file' => 'max:500000',
]);
Значение находится в килобайтах. То есть max:10240
= max 10 МБ.
Я пытаюсь проверить максимальный размер файла 500 КБ в Laravel:
$validator = Validator::make($request->all(), [
'file' => 'size:500',
]);
Но это говорит о том, что файл должен быть ровно 500 КБ. Как я могу отредактировать это правило так, чтобы оно возвращало ошибку, когда оно больше 500 КБ?
Я попробовал это:
'file' => 'size:>=500'
'file' => 'size:max:500'
Документация ничего не говорит об этом:
Размер: значение
Проверяемое поле должно иметь размер, соответствующий заданному значению. Для строковых данных значение соответствует количеству символов. Для числовых данных значение соответствует заданному целочисленному значению. Для файлов размер соответствует размеру файла в килобайтах.
Согласно документации:
$validator = Validator::make($request->all(), [
'file' => 'max:500000',
]);
Значение находится в килобайтах. То есть max:10240
= max 10 МБ.
Изменение: Предупреждение! Этот ответ работал в моей среде 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"
];
}
}
aaaaaaaaaa dcsdvc bhgrt trhrth ntntgn bfeb bfdbdfbfd