Перейти до вмісту
tatetUI

FileUpload

Зона drag&drop з валідацією й прев'ю — без власної upload-логіки.

Зона завантаження без магії: компонент валідує (тип, розмір), прев'юїть одиночний файл і віддає File[] у select. САМ upload не робить — бібліотека не знає вашого бекенду. Фетч, loading і progress керує споживач.

Приклад

Перетягніть файли сюди

або натисніть, щоб обрати

Зображення або PDF, до 10 МБ. Завантаження на сервер — на боці споживача.

API

Props

НазваТипТиповоОпис
acceptstringundefinedФільтр типів: `image/*,.pdf`. Валідація по MIME або розширенню.
maxSizeMbnumber10Ліміт розміру файлу в МБ.
labelstring"Перетягніть файли сюди"Заголовок зони.
hintstringundefinedПідказка під зоною.
progressnumbernullПрогрес споживача 0–100 — показує смугу.
errorstringundefinedТекст помилки валідації споживача.
multiplebooleanfalseДозволити кілька файлів.
disabledbooleanfalse
loadingbooleanfalseСтан завантаження споживача: зона показує спінер.

Події

НазваPayloadОпис
error[message: string]Файл не пройшов валідацію (тип або розмір).
select[files: File[]]Валідні файли після перевірки accept і maxSizeMb.
remove[file: File]Одиночний файл видалено з локального прев'ю.

Слоти

НазваОпис
defaultЗамінює зону цілком; `open` відкриває системний file picker.
previewВласне прев'ю замість зображення.

Доступно через ref

НазваТипОпис
open() => voidВідкрити системний вибір файлу.

Коли використовувати

Аватарки, вкладки до сторінок, імпорт файлів. Прогрес-смуга з'являється, коли споживач передає progress під час запиту.

Коли НЕ використовувати

Не чекайте від компонента мережевих запитів — їх немає і не буде.

Для одного текстового поля «URL зображення» зона надлишкова — потрібен Input з підказкою.

Доступність

Зона — role="button" з tabindex=0: Enter і Space відкривають діалог, як і клік. Невалідний файл не зникає мовчки — error з назвою файлу читається через role="alert". Зона пов'язана з активною помилкою або підказкою через aria-describedby.

Власна зона через default slot отримує open, dragActive, loading і disabled; викликайте open() зі своєї кнопки. Той самий метод доступний через template ref компонента.

Деталі реалізації

Локальне прев'ю — URL.createObjectURL без читання файлу в пам'ять; попередній URL відкликається при новому файлі й у onBeforeUnmount — без цього витік пам'яті. Видалення очищає нативний input, відкликає URL і емітить remove(file); для multiple=true список і далі контролює споживач.