В Carbon Components Svelte компонент FileUploader
используется для загрузки файлов пользователем. Ключевой задачей при
работе с файлами является валидация типов и размеров загружаемых
данных, чтобы предотвратить ошибки на стороне клиента и снизить
нагрузку на сервер.
Компонент FileUploader предоставляет следующие свойства
для управления валидацией:
accept — строка с MIME-типами или расширениями файлов,
разрешённых для загрузки.multiple — булевое значение, указывающее, разрешена ли
множественная загрузка.sizeLimit — ограничение размера файла в байтах.onAddFiles — коллбэк, вызываемый при добавлении
файлов.invalidFile — свойство, позволяющее отобразить ошибку в
случае несоответствия файла установленным правилам.Пример базового использования:
<script>
import { FileUploader } from 'carbon-components-svelte';
let uploadedFiles = [];
function handleAddFiles(event) {
const files = event.detail.files;
uploadedFiles = [...uploadedFiles, ...files];
}
</script>
<FileUploader
label="Загрузить файлы"
accept=".jpg,.png,.pdf"
multiple={true}
sizeLimit={10485760}
on:addFiles={handleAddFiles}
/>
В этом примере разрешена загрузка изображений и PDF-файлов размером до 10 МБ.
Свойство accept выполняет фильтрацию файлов по
типу на уровне браузера. Допускается использование следующих
форматов:
image/jpeg,
application/pdf.jpg, .png,
.pdfimage/*,application/pdfПри добавлении файла вне указанных типов компонент автоматически
отметит его как некорректный и вызовет событие
on:invalidFile. Пример обработки:
<FileUploader
label="Загрузить файлы"
accept="image/*,application/pdf"
on:invalidFile={(event) => {
console.log('Некорректный файл:', event.detail.file.name);
}}
/>
Важно: фильтрация accept выполняется на
стороне клиента, но не заменяет серверную проверку. Для безопасности
необходимо дублировать проверки на сервере.
Свойство sizeLimit позволяет ограничить размер
загружаемых файлов. Если файл превышает лимит, компонент автоматически
генерирует событие on:invalidFile.
<FileUploader
label="Загрузить файлы"
accept="image/*"
sizeLimit={5242880} // 5 МБ
on:invalidFile={(event) => {
alert(`Файл ${event.detail.file.name} слишком большой`);
}}
/>
Для проектов с множественной загрузкой можно реализовать фильтрацию файлов вручную перед добавлением в состояние:
function handleAddFiles(event) {
const validFiles = event.detail.files.filter(file => file.size <= 5242880);
uploadedFiles = [...uploadedFiles, ...validFiles];
}
Помимо стандартных проверок по MIME и размеру,
FileUploader позволяет реализовать кастомную
валидацию с помощью функции внутри
on:addFiles:
function customValidation(files) {
return files.filter(file => {
const isSupportedType = ['image/jpeg', 'image/png'].includes(file.type);
const isSmallEnough = file.size <= 5 * 1024 * 1024;
const isNotHidden = !file.name.startsWith('.');
return isSupportedType && isSmallEnough && isNotHidden;
});
}
function handleAddFiles(event) {
uploadedFiles = [...uploadedFiles, ...customValidation(event.detail.files)];
}
Этот подход обеспечивает максимальную гибкость и позволяет учитывать дополнительные бизнес-правила, например, игнорирование скрытых файлов или проверку специфических расширений внутри допустимых MIME-типов.
Компонент предоставляет встроенные элементы для отображения ошибок:
invalidFileText — текст ошибки для некорректного
файла.invalidFileTextBody — подробное описание причины
ошибки.sizeLimitMessage — сообщение при превышении размера
файла.Пример использования:
<FileUploader
label="Загрузить файлы"
accept="image/*,application/pdf"
sizeLimit={5242880}
invalidFileText="Неверный файл"
invalidFileTextBody="Допустимы только изображения и PDF до 5 МБ"
/>
Для динамического управления ошибками можно использовать состояние Svelte:
<script>
let errorMessage = '';
function handleInvalidFile(event) {
errorMessage = `Файл ${event.detail.file.name} не соответствует требованиям`;
}
</script>
<FileUploader
label="Загрузить файлы"
accept="image/*"
sizeLimit={5242880}
on:invalidFile={handleInvalidFile}
/>
{#if errorMessage}
<div class="bx--file__error">{errorMessage}</div>
{/if}
invalidFileText и invalidFileTextBody.Эти механизмы делают компонент FileUploader Carbon
Components Svelte мощным инструментом для безопасной и удобной работы с
файлами в веб-приложениях.