File Upload

File Upload - компонент для загрузки файлов с поддержкой drag & drop, множественной загрузки и валидации. Идеально подходит для загрузки изображений, документов и других типов файлов.


Import

Usage

Базовый пример использования с drag & drop областью.

Варианты (Variants)

FileUpload поддерживает три варианта интерфейса:

ВариантОписание
dnd-zoneDrag & drop область (по умолчанию)
button-zoneDrag & drop область с кнопкой внутри
buttonТолько кнопка загрузки

Типы загрузки

Drag & Drop

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

Button Zone

Комбинация drag & drop области с кнопкой для выбора файлов.

Button Variant

Простая кнопка для выбора файлов без drag & drop области.

Ограничения файлов

Загрузка изображений

Ограничение по типу файлов (только изображения) и размеру.

Загрузка документов

Ограничение для загрузки только документов (PDF, DOC, DOCX).

Основные возможности

Controlled

Вы можете контролировать загруженные файлы используя свойства value и onFilesChange.

Disabled

Отключенное состояние блокирует загрузку файлов.

With Validation

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

Кастомизация

Custom Texts

Настройте тексты кнопок и заголовков с помощью свойства texts.

Custom Styled

Используйте classNames для кастомизации стилей компонента.

Интеграция с формами

React Hook Form

FileUpload легко интегрируется с React Hook Form через Controller.

Свойства

FileUpload Props

АтрибутТипОписаниеПо умолчанию
type'single' | 'multiple'Тип загрузки: одиночный или множественный'single'
variant'dnd-zone' | 'button-zone' | 'button'Вариант интерфейса'dnd-zone'
titlestringЗаголовок, отображаемый в области загрузки-
descriptionstringОписание, отображаемое в области загрузки-
imageReactNodeКастомная иконка/изображение для области загрузки-
maxFilesnumberМаксимальное количество файлов (для type="multiple")1 для single, 5 для multiple
maxSizenumberМаксимальный размер файла в байтах5242880 (5 МБ)
acceptstringДопустимые типы файлов (например: "image/*", ".pdf,.doc")"*"
valueFileWithPreview[]Массив загруженных файлов (для контролируемого компонента)-
onFilesChange(files: FileWithPreview[]) => voidКоллбэк при изменении списка файлов-
onFilesAdded(files: FileWithPreview[]) => voidКоллбэк при добавлении новых файлов-
disabledbooleanОтключить загрузку файловfalse
showFileListbooleanПоказать список загруженных файловtrue
textsFileUploadTextsКастомные тексты для элементов интерфейсаСм. ниже
classNamesSlotsToClasses<FileUploadSlots>Кастомные классы для слотов-

FileUploadTexts

КлючОписаниеПо умолчанию
uploadFileТекст кнопки загрузки"Загрузить файл"
addFilesТекст кнопки добавления файлов"Добавить файлы"
removeAllТекст кнопки удаления всех файлов"Удалить все"
filesЗаголовок списка файлов"Файлы"

FileWithPreview Type

Slots

FileUpload использует следующие slots для кастомизации:

  • base: Корневой контейнер компонента
  • dropzone: Область drag & drop
  • icon: Иконка загрузки
  • iconImage: Изображение внутри иконки
  • label: Заголовок
  • description: Описание
  • errorText: Текст ошибки
  • errorContainer: Контейнер для ошибок
  • fileList: Список файлов
  • fileListContainer: Контейнер списка файлов
  • fileItem: Элемент файла в списке
  • fileName: Имя файла
  • fileSize: Размер файла
  • removeButton: Кнопка удаления файла
  • emptyState: Состояние без файлов
  • fileContainer: Контейнер информации о файле
  • fileImage: Превью файла
  • fileInfo: Информация о файле
  • buttonsContainer: Контейнер для кнопок
  • buttonGroup: Группа кнопок

Data Attributes

FileUpload имеет следующие data-атрибуты на элементе dropzone:

  • data-dragging: Когда файлы перетаскиваются над областью
  • data-disabled: Когда компонент отключен
  • data-has-files: Когда есть загруженные файлы

Примеры использования

Загрузка аватара

Загрузка нескольких изображений с превью

С обработкой загрузки на сервер

Валидация по размеру и типу

Использование с Zod и React Hook Form

Accessibility

  • Поддержка навигации с клавиатуры (Tab, Enter, Space)
  • Скрытый input с корректными ARIA атрибутами
  • Визуальная обратная связь при drag & drop
  • Понятные сообщения об ошибках для скрин-ридеров
  • Семантическая разметка для списка файлов
  • Поддержка disabled состояния

Примечания

  • Файлы автоматически получают уникальные ID при добавлении
  • Для изображений автоматически создается preview URL
  • Preview URL автоматически очищается при размонтировании компонента
  • Ошибки валидации (размер, тип, количество) отображаются автоматически
  • При перетаскивании файлов область подсвечивается
  • Компонент поддерживает как контролируемый, так и неконтролируемый режим
  • Для больших файлов рекомендуется использовать chunked upload на сервере
  • accept поддерживает MIME типы и расширения файлов
  • maxSize указывается в байтах (1 МБ = 1024 * 1024 байт)