File Upload [sw-upload]
Zona de drag & drop com preview de imagens, múltiplos arquivos, limite de tamanho e validação de tipo — sem dependências externas.
1. Variações
Arraste arquivos ou clique para selecionar. Preview automático para imagens, nome do arquivo para outros tipos.
Galeria de Imagens
Até 4 imagens — qualquer tamanho
Documento (PDF)
1 arquivo — máx 5 MB
Qualquer Arquivo
Vários — máx 2 MB cada
2. Evento em Tempo Real
Cada arquivo adicionado ou removido dispara um evento no wrapper com os dados do arquivo.
Selecione um arquivo para ver o evento...
const upl = document.querySelector('[sw-upload]');
upl.addEventListener('sw:upload:add', e => {
const files = e.detail.files; // todos os arquivos no momento
console.log('último adicionado:', files[files.length - 1].name);
});
upl.addEventListener('sw:upload:remove', e => {
console.log('índice removido:', e.detail.index);
});
3. Envio via FormData
Use SW.Upload.getFiles(el) para recuperar os arquivos e montar um FormData para envio via fetch.
const upl = document.querySelector('[sw-upload]');
document.querySelector('#btn-enviar').addEventListener('click', () => {
const files = SW.Upload.getFiles(upl);
if (!files.length) {
alert('Selecione ao menos um arquivo.');
return;
}
const form = new FormData();
files.forEach(f => form.append('files[]', f));
fetch('/upload', { method: 'POST', body: form })
.then(r => r.json())
.then(data => console.log('Enviado:', data));
});
Referência
| Atributo / API | Padrão | Descrição |
|---|---|---|
sw-upload | — | Ativa o upload no wrapper. |
sw-upload-accept | * | Tipos aceitos (mesma sintaxe do accept nativo) — ex: image/*, .pdf. |
sw-upload-max | ilimitado | Número máximo de arquivos. |
sw-upload-size | 10485760 (10MB) | Tamanho máximo por arquivo, em bytes. |
sw-upload-txt | texto padrão | Texto da zona de drop (aceita HTML simples). |
sw:upload:add / sw:upload:remove | — | Eventos — detail.files (array completo) / detail.index. |
SW.Upload.getFiles(el) | — | Retorna o array de File selecionados. |