2011-01-28 1 views
8

Urlmon.dllのFindMimeFromData関数がMIMEタイプ "application/octet-stream"を多くのファイルタイプに対して返すのに対し、MIMEタイプをファイル拡張子(Windowsレジストリに対して)でチェックすると、より正確な型が返されるのはなぜですか?Urlmon.dllのFindMimeFromData関数が、多くの種類のファイルに対してMIMEタイプ「application/octet-stream」を返すのはなぜですか?

たとえば、mp3は「audio/mp3」ではなく「application/octet-stream」です。

基本的に、誤った拡張子でアップロードされたファイルを確認したいと思います。このメソッドは、多くの画像ファイル、xmlなどで動作するようです。

質問はthis oneと似ていますが、返されるMIMEタイプが異なるため、アップロードされたファイルの検証には適していません。

答えて

5

FindMimeFromDataのドキュメントを読むとMIME Type Detection in Internet Explorerにつながります。その情報によれば、今日の世界ではかなり小さい26 different MIME typesを見つけるためにハードコードされています。 「audio/mp3」はその1つではありません。

FindMimeFromData は、(既知のMIMEタイプを参照してください)(現在は26)別のMIMEタイプのためのハードコーディングされたテストが含まれています。これは、指定されたバッファにこれらのMIMEタイプのいずれかのフォーマットのデータが含まれている場合、対応するMIMEタイプを認識するように設計されたテストがFindMimeFromDataに存在することを意味します。 MIMEタイプは、これらのN MIMEタイプの1つである場合には既知です。 「text/plain」、「application/octet-stream」、空文字列、またはnull(つまり、サーバーがそれを提供できなかった場合)のMIMEタイプはあいまいです。

残念ながら、は現代のMIMEタイプを判断するのにはあまり役に立ちません。

3

FindMimeFromDataが "application/octet-stream" "text/plain"を返すか、まったく返さない場合は、https://stackoverflow.com/a/9435701/74585のレジストリからファイルの種類を特定しようとします(ファイル拡張子?)。

ここには、.NETファイルタイプの検出ライブラリhttp://filetypedetective.codeplex.com/がありますが、現在のところわずかな数のファイルしか検出されません。

関連する問題