Validators

Validatori File

Validatori per file caricati - dimensione massima, estensioni consentite, tipi MIME e range di dimensioni.

Panoramica

I validatori file verificano le caratteristiche di file caricati tramite input di tipo file. Operano su oggetti File nativi del browser oppure su qualsiasi oggetto con le proprietà size (number), name (string) e/o type (string).

Tutti i validatori richiedono un parametro obbligatorio (eccetto quelli che leggono automaticamente dal file).

Struttura attesa del valore

// Oggetto File nativo
const file = document.querySelector('input[type=file]').files[0]

// Oggetto custom compatibile
const fileInfo = {
  size: 1048576,            // dimensione in bytes
  name: 'documento.pdf',   // nome file con estensione
  type: 'application/pdf'  // MIME type
}

Validatori

filesize

Sintassi: filesize:N
Descrizione: Verifica che la dimensione del file non superi il limite specificato in MB. Usa la proprietà size dell'oggetto file (in bytes).
Parametro: dimensione massima in MB (supporta decimali: 0.5 per 500KB)

Esempi:

// Max 5MB
ValidationService.validate(file, 'filesize:5')

// Max 500KB
ValidationService.validate(file, 'filesize:0.5')

// Max 100MB
ValidationService.validate(file, 'filesize:100')

// Con oggetto custom
const fileInfo = { size: 6 * 1024 * 1024, name: 'big.pdf', type: 'application/pdf' }
ValidationService.validate(fileInfo, 'filesize:5')  // non valido: 6MB > 5MB

// In schema DynamicFormLayouts
{ name: 'allegato', type: 'file', validation: 'required|filesize:10' }

filetype

Sintassi: filetype:ext1,ext2,...
Descrizione: Verifica che l'estensione del file (ricavata dal nome) sia tra quelle consentite. Le estensioni sono specificate senza punto, in minuscolo, separate da virgola. Il confronto è case-insensitive.
Parametro: lista estensioni consentite separate da virgola (senza punto)

Esempi:

// Solo documenti
ValidationService.validate(file, 'filetype:pdf,doc,docx')

// Solo immagini
ValidationService.validate(file, 'filetype:jpg,jpeg,png,gif,webp')

// Solo archivi
ValidationService.validate(file, 'filetype:zip,tar,gz,7z')

// Mix - immagini e PDF
ValidationService.validate(file, 'filetype:jpg,jpeg,png,pdf')

// Non valido
const exeFile = { size: 1024, name: 'virus.exe', type: 'application/octet-stream' }
ValidationService.validate(exeFile, 'filetype:pdf,doc,docx')  // non valido: .exe non consentito

// In schema DynamicFormLayouts
{ name: 'immagine', type: 'file', validation: 'required|filesize:2|filetype:jpg,jpeg,png,webp' }

filemimetype

Sintassi: filemimetype:tipo1,tipo2,...
Descrizione: Verifica il tipo MIME del file usando la proprietà type. Supporta wildcard per categoria (es. image/* per qualsiasi immagine). I tipi sono confrontati in minuscolo.
Parametro: lista di MIME type consentiti separati da virgola; supporta wildcard tipo/*

Esempi:

// Qualsiasi immagine
ValidationService.validate(file, 'filemimetype:image/*')

// Solo PDF
ValidationService.validate(file, 'filemimetype:application/pdf')

// Documenti Office e PDF
ValidationService.validate(file, 'filemimetype:application/pdf,application/msword,application/vnd.openxmlformats-officedocument.wordprocessingml.document')

// Mix wildcard e specifici
ValidationService.validate(file, 'filemimetype:image/*,video/*,application/pdf')

// Non valido
const pdfFile = { size: 1024, name: 'doc.pdf', type: 'application/pdf' }
ValidationService.validate(pdfFile, 'filemimetype:image/*')  // non valido

// In schema DynamicFormLayouts
{ name: 'foto', type: 'file', validation: 'required|filemimetype:image/*|filesize:5' }

sizerange

Sintassi: sizerange:min,max
Descrizione: Verifica che la dimensione del file sia compresa tra un minimo e un massimo. Supporta le unità di misura: K (KB), M (MB), G (GB), T (TB). Senza unità, il valore è in bytes.
Parametro: range nel formato min,max con unità (es. 100K,10M)

Unità supportate:

UnitàMoltiplicatore
(nessuna)1 byte
K1.024 bytes
M1.048.576 bytes
G1.073.741.824 bytes
T1.099.511.627.776 bytes

Esempi:

// Tra 100KB e 10MB
ValidationService.validate(file, 'sizerange:100K,10M')

// Tra 1MB e 100MB
ValidationService.validate(file, 'sizerange:1M,100M')

// Tra 500KB e 5MB
ValidationService.validate(file, 'sizerange:500K,5M')

// Almeno 1KB, massimo 5GB
ValidationService.validate(file, 'sizerange:1K,5G')

// Non valido: file troppo piccolo
const tinyFile = { size: 50, name: 'tiny.txt', type: 'text/plain' }
ValidationService.validate(tinyFile, 'sizerange:100K,10M')  // non valido

// In schema DynamicFormLayouts
{ name: 'video', type: 'file', validation: 'required|sizerange:1M,500M|filemimetype:video/*' }

Combinazioni tipiche

// Upload immagine profilo
{ name: 'avatar', type: 'file', validation: 'required|filesize:2|filetype:jpg,jpeg,png,webp|filemimetype:image/*' }

// Upload documento contratto
{ name: 'contratto', type: 'file', validation: 'required|filesize:10|filetype:pdf|filemimetype:application/pdf' }

// Upload video con range dimensione
{ name: 'video', type: 'file', validation: 'required|sizerange:1M,500M|filemimetype:video/*' }

// Upload allegato generico con limite dimensione
{ name: 'allegato', type: 'file', validation: 'filesize:25|filetype:pdf,doc,docx,xls,xlsx,zip' }