2011-01-28 3 views
8

Perché la funzione FindMimeFromData di Urlmon.dll restituisce il tipo MIME "application/octet-stream" per molti tipi di file, mentre il controllo del tipo MIME per estensione di file (ad esempio contro il registro di Windows) restituisce un tipo più preciso?Perché la funzione FindMimeFromData di Urlmon.dll restituisce il tipo MIME "application/octet-stream" per molti tipi di file?

Ad esempio, mp3 è un "application/octet-stream" invece di "audio/mp3".

Fondamentalmente, voglio verificare un file caricato con estensione errata. Questo metodo sembra funzionare per molti file immagine, xml, ecc.

La domanda è simile a this one, ma la soluzione fornita non è adatta per la convalida dei file caricati, a causa di tipi MIME diversi/ambigui restituiti.

risposta

5

La lettura della documentazione per FindMimeFromData mi porta a MIME Type Detection in Internet Explorer. Secondo queste informazioni, è hardcoded per trovare 26 different MIME types, che è abbastanza piccolo nel mondo di oggi. "audio/mp3" non è uno di questi.

FindMimeFromData contiene i test hard-coded per (attualmente 26) tipo MIME separato (vedere Tipi MIME noti). Ciò significa che se un dato buffer contiene dati nel formato di uno di questi tipi MIME, esiste un test in FindMimeFromData progettato (mediante la scansione del contenuto del buffer) per riconoscere il tipo MIME corrispondente. Un tipo MIME è noto se è uno di questi tipi N MIME. Un tipo MIME è ambiguo se è "text/plain", "application/octet-stream", una stringa vuota o null (ovvero, il server non è riuscito a fornirlo).

Sfortunatamente, sembra che non sia molto utile per determinare i tipi MIME moderni.