FileSano

Leggere e riparare file nel browser, senza che i byte tocchino il tuo server

Questa pagina non è per chi ha un file rotto — per quello c'è il tool, gratis. È per chi costruisce software e ha il problema opposto: deve far aprire, leggere o riparare i documenti dei propri utenti, e preferirebbe non riceverli mai.

Il punto tecnico

Tutti i motori di FileSano sono scritti in TypeScript, lavorano su Uint8Array e non hanno nessuna dipendenza esterna. Girano identici nel browser e in Node: nessun binario nativo, nessun WASM da servire, nessun servizio di conversione da chiamare. Il file si legge dove già si trova, cioè sul dispositivo di chi lo apre.

La conseguenza è architetturale, non di marketing: se i byte del documento non arrivano al tuo backend, non hai un archivio di documenti altrui da proteggere, da cifrare, da conservare, da cancellare su richiesta e da dichiarare. Un'informativa e una valutazione d'impatto su un flusso che non trasferisce dati sono un altro mestiere rispetto alle stesse cose su una coda di upload.

Dove serve calcolare una correzione fuori dal browser, viaggia solo un pacchetto strutturale: intestazioni, nomi di colonne o di file interni, offset, dimensioni, CRC. Mai record, mai celle, mai testo. La proprietà è verificata dai test, non promessa a parole: un pacchetto deve contenere il nome del campo RAGSOC e non deve contenere il valore Rossi.

Cosa c'è dentro

DBF / FoxPro (+ indici CDX)
legge l'intestazione, ricalcola il numero di record, rimette in piedi tabelle che il gestionale rifiuta di aprire; legge i tag di un CDX e sblocca il flag di sola lettura
Validato: file riparati riaperti da Visual FoxPro 9 reale (fixture generate da vfp9.exe)
Famiglia ZIP (xlsx, ods, docx, pptx, zip)
ricostruisce la Central Directory e l'EOCD scandendo le voci locali: è il danno tipico dell'archivio troncato o scaricato male
Validato: gli archivi ricostruiti si riaprono con il modulo zipfile di Python
PDF
ricostruisce la tabella xref e lo startxref (coda troncata, aggiornamento incrementale interrotto)
Validato: i PDF riparati si aprono con poppler / pdftotext
OLE2 / CFB (.doc, .xls, .ppt, .msg)
riassembla i 512 byte canonici di intestazione, ri-deriva il puntatore alla directory scandendo la Root Entry
Validato: i file riparati si rileggono con olefile di Python
P7M (CAdES)
parser ASN.1/DER minimale che apre la busta CMS SignedData ed estrae il documento firmato (XML o PDF)
Validato: confronto con openssl cms sullo stesso file
Fattura elettronica XML (SDI)
tag-walker che rende leggibile la fattura (soggetti, righe, riepilogo IVA, pagamento) ed estrae il PDF allegato
Validato: confronto con xml.etree di Python
CSV
riconosce la codifica, ripara la doppia codifica («Città» → «Città»), riscrive in UTF-8 con BOM
Validato: confronto con iconv
EML / MIME
header unfolding, encoded-word RFC 2047, multipart annidato, base64 e quoted-printable, allegati
Validato: confronto con il modulo email di Python
Riconoscimento del tipo reale
dai magic byte dice cos'è davvero un file e se l'estensione mente (HTML salvato come .pdf, CSV rinominato .xlsx, winmail.dat)
Validato: suite di casi degeneri: file vuoto, tutto zeri, byte casuali

Ogni motore ha la sua suite di test con lo stesso schema: un generatore di file sintetici conformi alle specifiche, un corruttore che riproduce i danni veri, le asserzioni sulla diagnosi e sulla riparazione, e — dove è possibile — la verifica con un parser di terze parti, che è la colonna «Validato» qui sopra.

Cosa NON fanno (la parte che conta)

Un motore di riparazione che promette tutto è un motore che mente. Questi dichiarano il limite invece di inventare un risultato: se in un OLE2 è distrutta la FAT, se in un PDF il catalogo sta in un object stream cifrato, se un archivio 7z ha perso l'end header in coda, la risposta è «non recuperabile», con la ragione. Non validano firme digitali (il P7M lo aprono, non lo verificano) e non ricostruiscono gli XML interni di un xlsx. Un indice non si ripara: si rigenera.

Stato onesto

Non è un prodotto: non c'è un pacchetto npm pubblicato, non c'è una licenza commerciale, non c'è una società. C'è un tool gratuito online, i motori che lo fanno funzionare, e la loro suite di test. L'unica cosa che deciderebbe se impacchettarli è sapere che servono a qualcuno.

Ti servirebbe nel tuo prodotto?

Non c'è un pacchetto pubblicato, non c'è un listino e non c'è un'azienda dietro: è un progetto in validazione. Prima di trasformare i motori in una libreria con licenza e documentazione, vorrei sapere se qualcuno la userebbe davvero.

Nessuna email richiesta — coerente con tutto il resto del sito: contiamo il click, non chi lo fa. Quando (e se) aprirò un canale di contatto, sarà scritto qui.

Vuoi vedere i motori all'opera prima di crederci? Butta un file rotto nel tool: la diagnosi gira nella scheda che hai aperto, e il pannello Rete del browser ti mostra cosa parte davvero.