Forms

FileUpload

Componente upload file con selezione tramite click o drag-and-drop, validazione dimensione e tipo, preview immagini e gestione lista file selezionati.

Import

import { FileUpload } from '@pzeta/vue-components'

Esempio Base

Il componente gestisce solo la selezione lato client. Il caricamento effettivo verso il server va implementato nell'handler dell'evento select. La validazione del tipo MIME lato server e sempre necessaria.

Props

PropTipoDefaultDescrizione
labelstring—Label del componente
acceptstring—Tipi MIME accettati (es. "image/*", ".pdf,.doc") — solo validazione client-side
multiplebooleanfalsePermette selezione di piu file
maxFileSizenumber—Dimensione massima per file in bytes. Mostrata in unità SI a base 1000: 5000000 è «5 MB» (fino alla 1.23 le unità erano KiB/MiB, «4,8 MiB»)
maxFilesnumber—Numero massimo di file selezionabili
disabledbooleanfalseDisabilita il componente
invalidbooleanfalseForza stato errore
requiredbooleanfalseCampo obbligatorio
showPreviewbooleanfalseMostra anteprima per file immagine
dragDropbooleanfalseAbilita area drag-and-drop
showInstructionsbooleantrueMostra nell'area di rilascio il limite di dimensione e i tipi accettati; da spegnere se il modulo li indica già con un testo proprio, che comparirebbe due volte (dalla 1.24.0)
loadingbooleanfalseMostra indicatore di caricamento
loadingIconstringconfigClasse icona loading spinner
helperTextstring | nullnullTesto di aiuto
errorstring | nullnullMessaggio di errore
inputIdstring—ID dell'elemento input file
namestring—Nome del campo per form submission
classstring''Classe CSS aggiuntiva

Emits

EventoPayloadDescrizione
selectFileUploadSelectEventFile selezionati (click o drop)
removeFileUploadRemoveEventFile rimosso dalla lista
clear—Tutti i file rimossi

Tipi Correlati

interface FileUploadFile extends File {
  objectURL?: string  // URL temporaneo per preview
}

interface FileUploadSelectEvent {
  originalEvent: Event
  files: FileUploadFile[]
}

interface FileUploadRemoveEvent {
  file: FileUploadFile
  index: number
  files: FileUploadFile[]  // file rimanenti dopo la rimozione
}

Esempi

Upload multiplo con limite dimensione

Drag and drop con preview immagini

Integrazione con upload server

Solo stati (disabled/loading/errore)

Sicurezza

La validazione accept e maxFileSize e solo client-side e puo essere aggirata. Validare sempre tipo MIME e dimensione lato server prima di processare i file.

Accessibilita

  • Il pulsante di selezione apre il file picker nativo del browser
  • L'area drag-drop ha gli handler corretti per dragover/drop
  • Il pulsante di rimozione singolo file e accessibile da tastiera

TypeScript

import type {
  FileUploadProps,
  FileUploadFile,
  FileUploadSelectEvent,
  FileUploadRemoveEvent,
} from '@pzeta/vue-components'

function onSelect(event: FileUploadSelectEvent) {
  for (const file of event.files) {
    console.log(file.name, file.size, file.objectURL)
  }
}

function onRemove(event: FileUploadRemoveEvent) {
  console.log('Rimosso:', event.file.name, 'Rimasti:', event.files.length)
}