2014-07-09 17 views

risposta

7

Questo sembra davvero un peccato, il più popolare dei moduli MIME sta solo mappando l'estensione al tipo.

Dopo aver cercato più a fondo, ho trovato il modulo chiamato mmmagic, sembra che stia facendo esattamente quello che vuoi.

essere consapevoli, che dal lavorare con MIME mi ha lasciato con un gusto, che MIME rilevamento è in linea di principio non è completamente affidabile, e non v'è una rara possibilità di falsi rilevamenti.

Esempio di utilizzo (tratto da their sito):

var mmm = require('mmmagic'), 
     Magic = mmm.Magic; 

    var magic = new Magic(mmm.MAGIC_MIME_TYPE); 
    magic.detectFile('node_modules/mmmagic/build/Release/magic.node', function(err, result) { 
     if (err) throw err; 
     console.log(result); 
     // output on Windows with 32-bit node: 
     // application/x-dosexec 
    }); 
3

Dal MIME non significa affatto dettare nulla sul formato contenuto del file, è possibile utilizzare solo l'euristica per indovinare che cosa sta succedendo in un file:

  1. Alcuni formati binari hanno qualcosa chiamato numero magico, ma possono essere errati o ambigui. See this wikipedia article per maggiori informazioni.

  2. Molti formati di file di testo contengono costrutti grammaticali che è possibile utilizzare per un semplice test di corrispondenza del modello. Per esempio. xml, csv o json. Tuttavia alcuni formati (ad esempio HTML), hanno una definizione di sintassi piuttosto "evoluta" che lo rende ambiguo e quindi difficile da abbinare.

Per meglio illustrare il problema di ambiguità, ecco un esempio: browser hanno sviluppato una molto tolleranza molto alta, ed accettare tutto ciò che assomiglia a distanza HTML quindi un formato di file HTML (o anche XHTML) è difficile da identificare . Per non parlare del fatto che i file HTML potrebbero essere in realtà non- HTML lingue modello (come ad esempio jade, handlebars, angular modelli ecc ...). Questo è solo uno dei tanti esempi in cui le cose diventano molto ambigue.

Problemi correlati