Загрузка файла FileUploader
Давно не обновляли

Контрол для выбора пользователем файла на компьютере и отображения статуса его отправки на сервер.

Синхронная и асинхронная отправка

Контрол может работать в двух режимах: синхронном — отправляет файлы на сервер вместе с данными формы по сабмиту и асинхронном — отправляет файлы на сервер сразу после их выбора и сразу показывает прогресс. В каждом из этих режимов можно включить мультивыбор — когда в контроле можно выбрать и отобразить сразу несколько файлов.

Синхронная отправка

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

Когда мультивыбор отключён, можно выбрать только один файл. Клик в ссылку открывает диалог выбора нового файла взамен выбранного. Клик на крестик отменяет выбор и сбрасывает контрол. Также можно перетащить новый файл в зону драг-н-дропа — выбранный ранее файл заменится новым.

Контрол в пунктирной рамке: «Выбран файл» и серое имя PNG-файла, справа крестик

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

Список из трёх выбранных файлов, у каждого справа крестик, строка под курсором подсвечена серым. В конце списка — контрол «Выберите файл или перетащите сюда» со значком загрузки.

Если есть такая возможность, выводите дополнительную информацию о выбранных файлах, превью картинки, иконку типа файла и его размер:

Список из трёх файлов: у картинки превью, у документа и видео — значки типа, справа у каждого размер и крестик. В конце списка — контрол «Выберите файл или перетащите сюда».

Пример заполненной формы с таким полем:

Форма с полями «Фамилия» — «Петров», «Имя» — «Виктор», «Дата рождения» — 24.12.1983 и контролом «Скан первой страницы паспорта» с выбранным файлом. Ниже «Адрес по прописке» со ссылкой «Изменить» и кнопка «Сохранить».

Асинхронная отправка

Такой режим можно использовать в формах, где файлы или данные формы отправляются на сервер и валидируются сразу после выбора. В нём возможен автоматический старт загрузки и отображения процесса:

Выбранный файл отправляется — справа от имени спиннер, под ним контрол «Выберите файл или перетащите сюда»

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

Строка с файлом под курсором подсвечена серым, справа вместо спиннера крестик

Если файл успешно отправлен, спиннер меняется на галку:

Файл отправлен — справа от имени галочка, под ним контрол «Выберите файл или перетащите сюда»

В режиме мультивыбора контрол выбора всегда дублируется в конце списка:

Список из трёх файлов: первый отправляется — справа спиннер, второй под курсором — строка серая, справа крестик, третий отправлен — справа галочка. В конце списка — контрол «Выберите файл или перетащите сюда».

Если есть возможность отображать прогресс отправки файла, можно заменить спиннеры на прогресс-ринг:

Три файла отправляются — справа от каждого прогресс-ринг с разной степенью заполнения. В конце списка — контрол «Выберите файл или перетащите сюда».

Или прогресс-бар:

Прогресс отправки — серая заливка строки под именем: у первого файла заполнено больше половины, у второго около трети, третий отправлен — справа галочка. В конце списка — контрол «Выберите файл или перетащите сюда».

Отображение ошибок

При ошибках, которые относятся к конкретным файлам, название файла подсвечивается красным, при наведении или фокусе на строку появляется тултип с текстом ошибки. Например, сервер вернул ошибку:

Контрол «Выбран файл» с красным обрезанным именем видеофайла и крестиком, курсор на имени; рядом тултип «Файл не удалось отправить на сервер, повторите попытку позже»

Если нужны файлы определённого формата, ограничьте их на этапе выбора — это лучше, чем показать ошибку после выбора. Если это невозможно — помечайте неправильный файл:

Допустимо: список из трёх файлов, первый отправляется, имена двух видеофайлов .mov красные — у одного значок с минусом, на другом курсор и тултип «Допустимо отправлять файлы с расширением .jpg и .png»

При общих ошибках, которые не могут быть отнесены к определённому файлу, красным подсвечивается контрол выбора — появляется красная обводка как у полей с ошибкой. Например, когда превышен объём файлов:

Список из трёх файлов, контрол выбора обведён красной рамкой, под ним текст об ограничении: не больше двух файлов общим объёмом до 200 Мб — чтобы добавить файлы, нужно удалить выбранные

Если есть ограничения по размеру и формату файлов, обозначайте сразу в виде комментария под контролом. При достижении лимита по количеству файлов — блокируйте контрол, не давая пользователю совершать лишнее действие, которое приведёт к ошибке. Предупредите пользователя об ограничениях — это сделает интерфейс дружелюбнее.

Дизайн

Состояние по умолчанию:

Контрол в пунктирной рамке: «Выберите файл или перетащите сюда», справа значок загрузки

Наведение на контрол:

Контрол «Выберите файл или перетащите сюда» под курсором — вместо пунктирной рамки серый фон

Вид при перетаскивании файлов:

Файл перетаскивают на контрол — он обведён толстой синей рамкой, под курсором значок и имя файла

Файл выбран:

Контрол с выбранным файлом: синяя ссылка «Выбран файл», имя PNG-файла и серый крестик

Если имя файла не входит, скрываются символы в центре, а при наведении на контрол появляется хинт с полным именем:

Контрол «Выбран файл» с именем, обрезанным в середине, на нём курсор; над контролом тёмный хинт с полным именем «Screen Recording 2021-12-15 at 12.40.42.mov»

В асинхронном варианте скрытие символов работает так же:

Строка файла с именем, обрезанным в середине, на нём курсор; над строкой тёмный хинт с полным именем «New screen recording uploaded 2021-12-15 at 12.40.42.mov», ниже контрол выбора

Фокус с клавиатуры:

Контрол «Выберите файл или перетащите сюда» в фокусе — вместо пунктирной рамки сплошная чёрная

Фокус с клавиатуры на списке выбранных файлов:

Фокус на строке выбранного файла: строка подсвечена серым, крестик справа обведён рамкой; ниже контрол выбора