Laravel установить максимальный размер загрузки для определенных маршрутов? - PullRequest
0 голосов
/ 04 апреля 2019

Я хочу изменить upload_max_filesize только для определенных маршрутов. Но, как и в PHP> 5.3, ini_set () не будет работать для установки ограничений из скрипта. Есть ли обходной путь?

UPDATE

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

Ответы [ 2 ]

0 голосов
/ 07 апреля 2019

После некоторых исследований я обнаружил, что ни это невозможно, ни должно быть сделано таким образом!

Когда запрос с большим файлом, прикрепленным к его телу, достигает части фреймворка Controller / Middleware, он уже тратит впустую RAM, CPU и Storage моего сервера. Таким образом, блокировка запроса с этой точки не имеет никакого смысла.

Веб-серверы и их соответствующие конфигурации для веб-сайта с маршрутами, которые должны обрабатывать большие файлы, и другие маршруты ДОЛЖНЫ быть разделены. Итак, я придумал 2 сайта,

  • один позволяет большие файлы и обслуживает только эти конкретные маршруты ответственная обработка больших файлов.
  • другой для маршрутов API и имеет ограничение upload_max_filesize, установленное на небольшое значение.
0 голосов
/ 04 апреля 2019

Один простой способ - использовать валидатор:

для установки максимального размера использования

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

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

также см .:

Проверка запроса Laravel

И если вы хотите использовать это правило много раз, вы можете сделать запрос и добавить туда эти правила

1. пробег

php artisan make:request ExampleRequest

2. в приложении / Http / Запросы выберите ExampleRequest

public function authorize()
{
    return true;
}

public function rules()
{
    return [
        'file'=>'max:500000',
    ];
}

3. используйте ExampleRequest там, где вам нужно, вместо Request

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...