Загрузка файлов в Yii, обычно, выполняется при помощи класса [[yii\web\UploadedFile]], который представляет каждый загруженный файл в виде объекта `UploadedFile`. Используя [[yii\widgets\ActiveForm]] и [модели](structure-models.md) можно легко создать безопасный механизм загрузки файлов.
## Создание моделей <span id="creating-models"></span>
Как и в случае с обработкой текстового ввода, для загрузки файла можно создать класс модели и использовать его атрибут для хранения экземпляра объекта `UploadedFile`, содержащего параметры загруженного файла. Так же, возможно использование правил валидации модели для проверки загруженного файла. Например,
В примере выше атрибут `imageFile` используется для хранения экземпляра загруженного файла. Правило валидации `file`, которое, при помощи валидатора [[yii\validators\FileValidator]], проверяет расширение загруженного файла на соответствие с `png` или `jpg`. Метод `upload()` выполняет валидацию и сохраняет загруженный файл на сервере.
Валидатор `file` позволяет проверять расширение, размер, тип MIME и другие параметры загруженного файла. Подробности в разделе [Встроенные валидаторы](tutorial-core-validators.md#file).
> Подсказка: При загрузке изображений лучше использовать соответствующий валидатор `image`. Данный валидатор реализован классом [[yii\validators\ImageValidator]] и позволяет проверить корректность загруженного изображения при помощи [расширения Imagine](https://github.com/yiisoft/yii2-imagine).
Важно помнить, что для корректной загрузки файла, необходим параметр формы `enctype`. Метод `fileInput()` выведет тег `<input type="file">`, позволяющий пользователю выбрать файл для загрузки.
При получении данных, отправленных из формы, для создания из загруженного файла экземпляра объекта `UploadedFile`, вызывается метод [[yii\web\UploadedFile::getInstance()]]. Далее всю работу по валидации и сохранению загруженного файла на сервере берет на себя модель.
Сначала нужно добавить в правило валидации `file` параметр `maxFiles` для ограничения максимального количество загружаемых одновременно файлов. Метод `upload()` нужно изменить для сохранения загруженных файлов по одному.
В представлении, в вызов метода `fileInput()`, нужно добавить параметр `multiple` для того, чтобы поле *input* позволяло выбирать несколько файлов одновременно:
В действии контроллера нужно заменить вызов `UploadedFile::getInstance()` на `UploadedFile::getInstances()` для присвоения атрибуту модели `imageFiles` массива объектов `UploadedFile`.