JS Module

File Upload Y2Upload

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('[y2upload]');

upl.addEventListener('yd:upload:add', e => {
  const files = e.detail.files; // todos os arquivos no momento
  console.log('?sltimo adicionado:', files[files.length - 1].name);
});

upl.addEventListener('yd:upload:remove', e => {
  console.log('índice removido:', e.detail.index);
});

3. Envio via FormData

Use Y2Upload.getFiles(el) para recuperar os arquivos e montar um FormData para envio via fetch.

const upl = document.querySelector('[y2upload]');

document.querySelector('#btn-enviar').addEventListener('click', () => {
  const files = Y2Upload.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));
});

Quick Reference

Atributo / API Padrão Descrição
y2upload Ativa o upload no wrapper
y2upload-accept * Tipos aceitos — ex: image/*, .pdf
y2upload-max 0 (ilimitado) Número máximo de arquivos
y2upload-size 10485760 (10 MB) Tamanho máximo por arquivo em bytes
y2upload-txt texto padrão Texto HTML exibido na zona de drop
Y2Upload.getFiles(el) Retorna Array<File> dos arquivos selecionados
yd:upload:add Disparado ao adicionar — detail.files (array completo)
yd:upload:remove Disparado ao remover — detail.index