4

拡張子を使用せずに、アップロードされたファイルの種類を確実に確認するにはどうすればよいですか? ヘッダーを調べたり、バイトの一部を読み取ったりする必要があると思いますが、どうすればよいかわかりません。私はc#とasp.netを使用しています。

アドバイスをありがとう。


上記のリンクから、たとえば.jpgファイルを確実に識別するために「ff d8 ff e0」を探していることがわかりました。

私のコードでは、最初の 20 バイトを問題なく読み取ることができます。

                FileStream fs = File.Open(filePath, FileMode.Open);
                Byte[] b = new byte[20];
                fs.Read(b, 0, 20);

そうです(ここで私の経験不足を許してください)が、バイト配列に「ff d8 ff e0」が含まれているかどうかを確認するにはどうすればよいですか?

4

5 に答える 5

4

あなたが投稿したフォローアップの質問に対する迅速で汚い回答は次のとおりです。

byte[] jpg = new byte[] { 0xFF, 0xD8, 0xFF, 0xE0 };
bool match = true;
for (int i = 0; i < jpg.Length; i++)
{
    if (jpg[i] != b[i])
    {
        match = false;
        break;
    }
}
于 2008-10-29T01:21:06.307 に答える
2

それは確かに Unixfileプログラムが行うことであり、多かれ少なかれ信頼性があります。部分的には、検出しようとしているファイルのプログラムがファイル ヘッダーを出力するかどうかによって異なります。プログラムtarはそうしないことで有名です。file試して認識する予定のファイルの種類の数によって異なりますが、 ;の実装を使用するのが最も簡単かもしれません。多くのファイル タイプを認識し、最新バージョンは、多数のシナリオを処理できる追加のファイル タイプ定義のファイルを介して拡張可能です。

于 2008-10-28T23:01:42.813 に答える
1

多くの場合、ファイルの最初の数バイトでファイルの種類がわかります。たとえば、
http ://www.garykessler.net/library/file_sigs.html
http://www.astro.keele.ac.uk/oldusers/rno/Computing/File_magic.htmlを参照してください。

System.IO を使用して、アップロード後にバイをバイナリとして読み取ります。

しかし、なぜ ContentType ヘッダーに頼ることができないのでしょうか?

于 2008-10-28T23:00:07.107 に答える
1

Wotsitは、さまざまなファイル タイプのマジック ナンバーを見つけるための優れたリソースです。

于 2008-10-28T23:31:50.880 に答える
-1

ファイルの内容を読み取ることは、絶対確実な方法です。.Netでビルドしているので、アップロードされたファイルのMIMEタイプを確認できます。

あなたは助けるためにurlmon.dllをDllImportすることができます。http://coding-passion.blogspot.com/2008/11/validating-file-type.htmlの投稿を参照して ください。

そして、コンテンツタイプに関して明確にするために、それは常にファイルの拡張子によって駆動されます。したがって、.zipファイルの拡張子が.txtに変更された場合でも、コンテンツタイプはテキストのみと表示されます。

于 2008-11-21T00:30:00.243 に答える