Загрузчик сам отправляет файлы по HTTP. Если файлы нужно только выбрать и отправить вместе с формой — возьмите поле CdsFileInput, а для зоны перетаскивания с превью изображений — CdsFileUpload.
Анатомия
Первая схема — каркас: лейбл, описание, кнопка загрузки и сообщения. Вторая — элемент списка файлов во время загрузки: статус, имя-ссылка, действия и полоса прогресса.
Вариации
Кнопка загрузки
По умолчанию загрузку запускает primary-кнопка «Загрузить файл» с иконкой upload-icon. Свойство button-props передаёт кнопке любые свойства CdsButton, а слот default заменяет её целиком — готовые пропсы кнопки приходят в параметре слота props.
Разрешённые типы файлов
Свойство accept ограничивает выбор в системном диалоге и отфильтровывает неподходящие файлы при перетаскивании — отклонённые приходят в событии reject.
Список файлов
Список загруженных файлов живёт в v-model — положите туда файлы, полученные с сервера, и они отобразятся сразу. Свойство show-upload-list управляет списком: false скрывает его целиком, объект — включает иконки скачивания и удаления.
Количество файлов
Свойство max-count ограничивает длину списка: при max-count="1" новый файл заменяет предыдущий, при большем лимите лишние файлы отбрасываются.
Загрузка директорий
Свойство directory включает выбор папки целиком — файлы собираются из неё рекурсивно, в том числе при перетаскивании.
Состояния
disabled блокирует кнопку и убирает иконки удаления из списка, readonly запрещает менять список, но оставляет скачивание.
Слоты
Когда пропсов недостаточно, содержимое любого блока заменяется слотом.
| Имя слота | Описание |
|---|---|
label | Содержимое лейбла (замещает label) |
description | Содержимое описания (замещает description) |
prepend | Элемент перед кнопкой загрузки |
default | Своя кнопка загрузки; получает готовые props для CdsButton |
append | Элемент после кнопки загрузки |
messages | Содержимое блока сообщений |
itemRender | Свой рендер элемента списка; получает file, fileList и actions |
Рекомендации
Сценарии использования
Отложенная отправка
Хук before-upload, возвращающий false, отключает автоматическую отправку: файлы копятся в списке, а загрузку запускает отдельная кнопка в слоте append — например, вместе с отправкой всей формы.
Проверка перед загрузкой
Тот же before-upload — точка для валидации: верните false, и файл не уйдёт на сервер. Отклонённый файл всё равно попадает в список — уберите его в обработчике change, а причину покажите через error-messages.
Ошибки загрузки
Файл, который сервер отклонил, остаётся в списке со статусом ошибки. Свойство show-tooltip-with-error показывает ответ сервера в тултипе у статуса, а событие error даёт собрать сообщения под полем — здесь они копятся в error-messages и сбрасываются при удалении файла.
Загрузка без сервера
Свойство custom-request заменяет встроенный XHR-транспорт своей функцией: она получает файл и колбэки onProgress, onSuccess, onError, а возвращает объект с методом abort. Здесь загрузка имитируется таймером — так же можно отправлять файлы через SDK или WebSocket.
События
Компонент сообщает о каждом шаге: change — любое изменение списка, progress, success и error — ход загрузки, remove, drop, reject, download, preview — действия пользователя. Откройте консоль, чтобы увидеть их.
API
Пропсы
| Имя | Тип | По умолчанию | Описание |
|---|---|---|---|
accept | string | string[] | undefined | '' | Типы разрешённых файлов |
action | NUploader.TAction | undefined | '' | URL, куда загружать файлы |
activeColor | string | undefined | — | Цвет компонента, когда он находится в активном состоянии |
appendIcon | IconValue | undefined | — | Иконка в слоте append после контента |
baseColor | string | undefined | — | Цвет неактивного компонента |
beforeUpload | ((file: NUploader.IUploadFile<any>, fileList: NUploader.IUploadFile<any>[]) => NUploader.TBeforeUploadFileType | Promise<void | NUploader.TBeforeUploadFileType>) | undefined | — | Хук жизненного цикла перед загрузкой файла |
bgColor | string | undefined | — | Цвет фона компонента |
buttonProps | Partial<CdsButtonProps> | undefined | null | Свойства для компонента CdsButton |
capture | boolean | "user" | "environment" | undefined | — | Тип носителя, откуда захватывать файл для загрузки на мобильных устройствах |
centerAffix | boolean | undefined | true | Выровнять по вертикали элементы appendInner, prependInner, clearIcon и label по центру. |
color | string | undefined | — | Цвет компонента |
customRequest | ((options: NUploader.IUploadRequestOption<any>) => void) | undefined | — | Собственный запрос на загрузку файла. Переопределяет xhr по умолчанию |
data | Record<string, unknown> | ((file: string | Blob | NUploader.IRcFile) => Record<string, unknown>) | {} | undefined | {} | Параметры загрузки файла или функция, возвращающая параметры загрузки файла |
defaultFileList | NUploader.IUploadFile<any>[] | undefined | — | Список файлов по умолчанию |
description | string | undefined | — | Описание компонента, отображаемое под меткой |
direction | "horizontal" | "vertical" | undefined | 'horizontal' | Переключение между горизонтальным или вертикальным отображением. |
directory | boolean | undefined | — | Загружать директории |
disabled | boolean | null | undefined | null | Заблокированное состояние |
downloadIcon | IconValue | undefined | 'download' | Иконка скачивания файла |
error | boolean | undefined | — | Отображает компонент в состояние ошибки |
errorMessages | string | readonly string[] | null | undefined | [] | Отображает компонент в состояние ошибки и передает пользовательские сообщения об ошибках.
Будет объединяться с любыми проверками, заданными в свойстве rules.
Это поле не запускает валидацию. |
focused | boolean | undefined | — | Управляет состоянием фокуса компонента. Когда true, компонент считается сфокусированным и может применять соответствующие стили или поведение. |
headers | NUploader.TUploadRequestHeaders | undefined | — | Заголовки запроса |
hideDetails | boolean | "auto" | undefined | — | Скрытие блока с деталями (сообщениями и подсказками). При значении 'auto' блок скрывается, если нет сообщений |
hideMessages | boolean | undefined | — | Скрыть сообщения под полем ввода |
hint | string | undefined | — | Текст подсказки, отображаемый под полем ввода |
iconColor | string | boolean | undefined | — | Цвет иконки. Принимает булево значение или строку с цветом |
id | string | undefined | — | Уникальный идентификатор компонента |
isImageUrl | ((file: NUploader.IUploadFile<any>) => boolean) | undefined | — | Настройка отображения миниатюр загружаемых файлов (пока не поддерживается) |
itemRender | NUploader.TItemRender<any> | undefined | — | Функция рендера для отображения элемента списка загружаемых файлов |
label | string | undefined | — | Текст метки (label) компонента |
listType | NUploader.TUploadListType | undefined | 'text' | Тип списка загружаемых файлов (поддерживается только 'text') |
maxCount | number | undefined | — | Максимальное количество загружаемых файлов |
maxErrors | string | number | undefined | 1 | Максимальное число отображаемых ошибок при валидации |
maxWidth | string | number | undefined | — | Максимальная ширина компонента |
messages | string | readonly string[] | undefined | [] | Сообщения для отображения под полем ввода |
method | NUploader.TUploadRequestMethod | undefined | — | Тип http-запроса для загрузки файлов |
minWidth | string | number | undefined | — | Минимальная ширина компонента |
modelValue | any | — | Значение компонента в v-model. Если компонент поддерживает свойство multiple, по умолчанию используется пустой массив. |
multiple | boolean | undefined | true | Множественная загрузка файлов |
name | string | undefined | — | Имя поля ввода |
openFileDialogOnClick | boolean | undefined | — | Открывать ли системное окно при клике на загрузчик файлов |
persistentHint | boolean | undefined | — | Всегда отображать подсказку, а не только при фокусе |
prependIcon | IconValue | undefined | — | Иконка в слоте prepend перед контентом |
readonly | boolean | null | undefined | null | Только для чтения |
removeIcon | IconValue | undefined | 'delete' | Иконка удаления файла |
rules | readonly ValidationRule[] | undefined | [] | Принимает массив, состоящий из элементов различных типов: функций, логических значений и строк. Функции принимают входное значение в качестве аргумента и должны возвращать либо true / false, либо строку, содержащую сообщение об ошибке. Поле ввода перейдет в состояние ошибки, если функция возвращает значение false (или любое значение в массиве содержит false) либо является строкой. |
showTooltipWithError | boolean | undefined | false | Показывать ли тултип с ошибкой возле каждого файла |
showUploadList | boolean | NUploader.TShowUploadList | undefined | true | Показывать список загруженных файлов |
size | number | "xs" | "sm" | "md" | "lg" | "xl" | undefined | 'md' | Размер компонента |
tag | string | JSXComponent<any> | undefined | 'span' | Пользовательский HTML-тег для отображения |
textColor | string | undefined | — | Цвет текста компонента |
theme | string | undefined | — | Тема компонента |
uploadIcon | IconValue | undefined | 'upload' | Иконка загрузки файла |
validateOn | ValidateOn | undefined | — | Изменяет тип события, при котором запускается валидация |
validationValue | any | — | Значение, используемое при применении правил валидации |
width | string | number | undefined | — | Ширина компонента |
withCredentials | boolean | undefined | — | Запрос с передачей cookie |
События
| Имя | Тип | Описание |
|---|---|---|
change | [info: NUploader.IUploadChangeParam<NUploader.IUploadFile<any>>] | Событие изменения поля ввода |
download | [file: NUploader.IUploadFile<any>] | Событие при скачивании файла |
drop | [event: DragEvent] | Событие при drag-n-drop файла |
error | [error: ProgressEvent<EventTarget> | NUploader.IUploadRequestError, response: any, file: NUploader.IUploadFile<any>] | Событие ошибки загрузки файла |
preview | [file: NUploader.IUploadFile<any>] | Событие при просмотре превью файла |
progress | [event: { percent: number; } | undefined, file: NUploader.IUploadFile<any>] | Событие процесса загрузки файла |
reject | [fileList: NUploader.IUploadFile<any>[]] | Событие при отклонении загрузки файла |
remove | [file: NUploader.IUploadFile<any>] | Событие при удалении файла |
success | [response: Record<string, unknown>, file: NUploader.IUploadFile<any>] | Событие успешной загрузки файла |
update:modelValue | [fileList: NUploader.IUploadFile<any>[]] | Событие при изменении значения (v-model) |
Слоты
| Имя | Тип | Описание |
|---|---|---|
append | any | Контент в слоте append после кнопки загрузки. |
default | { props: Partial<CdsButtonProps>; } | Кнопка/активатор загрузки. Получает props для CdsButton. |
description | any | Описание под меткой. |
itemRender | { originNode: VNode<RendererNode, RendererElement, { [key: string]: any; }>; file?: NUploader.IUploadFile<any> | undefined; fileList?: NUploader.IUploadFile<any>[] | undefined; actions: { download?: (() => void) | undefined; preview?: (() => void) | undefined; remove?: (() => void) | undefined; }; } | Кастомный рендер элемента списка загружаемых файлов. |
label | any | Метка (label) поля загрузки. |
messages | any | Сообщения подсказки/ошибки. |
prepend | any | Контент в слоте prepend перед кнопкой загрузки. |
Exposed
| Имя | Тип | Описание |
|---|---|---|
fileList | NUploader.IUploadFile<any>[] | Текущий список файлов со статусами загрузки. |
uploadRef | NUploader.IUploaderRef | undefined | Ссылка на внутренний элемент загрузки — даёт доступ к программному выбору файлов и прерыванию. |