Как добавить поле для загрузки файлов⚓︎
Загрузка файлов⚓︎
Вы можете добавить функцию загрузки файлов в чертежи страниц, конфигураций, плагинов и тем. Загрузка файлов всегда основана на Ajax и позволяет перетаскивать их с рабочего стола или выбирать их как обычные поля файла. Каждый раз, когда файл добавляется в поле, он автоматически загружается во временную папку и будет сохранен только при выполнении действия «Сохранить» (или «Отправить»).
Пример использования:
custom_file:
name: myfile
type: file
label: A Label
destination: 'plugins://my-plugin/assets'
multiple: true
autofocus: false
accept:
- image/*
Чтобы добавить загрузку файла, вы должны иметь нижнюю команду рендеринга javascript в вашем базовом шаблоне Twig: {{ assets.js('bottom') }}
Параметры⚓︎
Поле файла имеет несколько доступных опций, от принятого типа или расширения MIME до разрешенного размера файла:
Значения по умолчанию⚓︎
custom_file:
type: file
label: A Label
multiple: false
destination: 'self@'
random_name: false
avoid_overwriting: false
limit: 10
accept:
- image/*
multiple
⚓︎
Как и в случае с обычным полем файла HTML5, когда включена опция multiple
, оно позволяет загружать более одного файла. Этот параметр также связан с параметром limit
, который определяет, сколько максимум разрешено выбирать файлов за раз.
destination
⚓︎
Место назначения — это место, где должны храниться загруженные файлы. Это может быть обычный path
(относительно корня Grav), stream
(такой, как theme://images
), self@
, или специальный префикс page@:
. Вы также можете ссылаться на вложенную папку относительно текущей страницы с помощью self@/path
.
self@
не допускается за пределами области страниц или объектов Flex, будет выдана ошибка. Если вы используете поле файла вне страницы или объекта Flex, вы всегда должны изменять настройку destination
.
Примеры⚓︎
- Если нужно загрузить файлы в папку плагина
testing
(user/plugins/testing
), местом назначения будет: - Предполагая, что у нас есть элемент блога на маршруте
/blog/ajax-upload
(физическое местоположение —user/pages/02.blog/ajax-upload
), с префиксомpage@:
адресатом будет: - Предположим, что текущая тема — это
antimatter
, и мы хотим загрузить в папку с ресурсами (физическое местоположение —user/themes/antimatter/assets
), с потокомtheme
место назначения будет:
random_name
⚓︎
Когда включено random_name
, загруженный файл будет переименован случайной строкой длиной 15 символов. Это полезно, если вы хотите хешировать свои загруженные файлы или если вы ищете способ уменьшить коллизию имен.
Пример⚓︎
avoid_overwriting
⚓︎
Когда включен параметр prevent_overwriting
и файл с таким же именем, как и загруженный, уже существует в destination
, он будет переименован. Перед вновь загруженным файлом будет стоять префикс текущей даты и времени, соединенный тире.
Пример⚓︎
limit
⚓︎
Когда включен параметр multiple
, limit
позволяет ограничить количество разрешенных файлов для отдельного поля. Если multiple
не включен (не включен по умолчанию), limit
автоматически возвращается к 1.
Если для параметра limit
установлено значение 0, это означает, что нет ограничений на количество разрешенных файлов, которые могут быть загружены.
Рекомендуется всегда проверять установленный лимит разрешенных файлов, которые могут быть загружены. Таким образом, у вас будет больше контроля над использованием ресурсов вашего сервера.
accept
⚓︎
Параметр accept позволяет использовать массив типа MIME, а также определения расширений. Все расширения должны начинаться с .
(точки) плюс само расширение.
Кроме того, вы также можете разрешить любой файл, просто используя обозначение * (звездочка) accept: ['*']
.
Примеры⚓︎
- Чтобы разрешить только файлы
yaml
иjson
: - Чтобы разрешить только изображения и видео:
- Чтобы разрешить любое изображение, любое видео и только файлы mp3:
- Чтобы разрешить любой файл:
filesize
⚓︎
Максимальный размер файла ограничен:
- полем
filesize:
... - Настройкой
files: filesize:
плагина формыuser/plugins/form.yaml
... - Конфигурацией PHP для параметра
upload_max_filesize
для отдельных загружаемых файлов иpost_max_size
для максимального общего размера сообщения формы.
Примеры⚓︎
- Чтобы ограничить конкретное поле до
5M
- Чтобы ограничить все поля файла значением
5M
, отредактируйте файлuser/config/form.yaml
: