Validatori File
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 |
K | 1.024 bytes |
M | 1.048.576 bytes |
G | 1.073.741.824 bytes |
T | 1.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' }