JS Component

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 / APIPadrãoDescrição
sw-uploadAtiva o upload no wrapper.
sw-upload-accept*Tipos aceitos (mesma sintaxe do accept nativo) — ex: image/*, .pdf.
sw-upload-maxilimitadoNúmero máximo de arquivos.
sw-upload-size10485760 (10MB)Tamanho máximo por arquivo, em bytes.
sw-upload-txttexto padrãoTexto da zona de drop (aceita HTML simples).
sw:upload:add / sw:upload:removeEventos — detail.files (array completo) / detail.index.
SW.Upload.getFiles(el)Retorna o array de File selecionados.