2011-07-09 9 views
1

ASP.NETのファイルアップロードコントロールでファイル形式を検証する最も良い方法は何ですか? 実際には、そのユーザーは特定の形式のファイルのみをアップロードします。私はファイル名をチェックすることによってそれを検証するが、私はこれ以上の別の解決策を探している。ファイルアップロードasp.net

+0

どのフォーマットを受け入れますか? – Andomar

+0

パケットトレーサファイル.pkt – SMK

答えて

1

ファイルから最初の256バイトを読み取り、内部DLL(urlmon.dll)を使用してファイルのMIMEタイプを返す次のコードを試してみてください。ファイルのMIMEタイプと解析後に返されたMIMEタイプを比較してください。

 using System.Runtime.InteropServices; ... 

      [DllImport(@"urlmon.dll", CharSet = CharSet.Auto)] 
      private extern static System.UInt32 FindMimeFromData(
      System.UInt32 pBC, 
      [MarshalAs(UnmanagedType.LPStr)] System.String pwzUrl, 
      [MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer, 
      System.UInt32 cbSize, 
      [MarshalAs(UnmanagedType.LPStr)] System.String pwzMimeProposed, 
      System.UInt32 dwMimeFlags, 
      out System.UInt32 ppwzMimeOut, 
      System.UInt32 dwReserverd 
     ); 

     public string getMimeFromFile(string filename) 
     { 
      if (!File.Exists(filename)) 
      throw new FileNotFoundException(filename + " not found"); 

      byte[] buffer = new byte[256]; 
      using (FileStream fs = new FileStream(filename, FileMode.Open)) 
      { 
       if (fs.Length >= 256) 
        fs.Read(buffer, 0, 256); 
       else 
       fs.Read(buffer, 0, (int)fs.Length); 
      } 
     try 
     { 
      System.UInt32 mimetype; 
      FindMimeFromData(0, null, buffer, 256, null, 0, out mimetype, 0); 
      System.IntPtr mimeTypePtr = new IntPtr(mimetype); 
      string mime = Marshal.PtrToStringUni(mimeTypePtr); 
      Marshal.FreeCoTaskMem(mimeTypePtr); 
      return mime; 
    } 
    catch (Exception e) 
    { 
     return "unknown/unknown"; 
    } 
    } 

ただし、異なるブラウザではMIMEタイプが異なる可能性があるため、異なるブラウザでタイプを確認してください。

また、ファイルの名前を編集して拡張子を変更した場合でも、正確なMIMEタイプが得られます。

希望します。

+0

申し訳ありませんが、iam looikng forwardからクライアントから検証してください。 – SMK

+0

@Shoaib、私もあなたの要件として何かを探していました。最後に、私はちょうどクライアント側の拡張機能をチェックし、上記のコードを使用して目的のためのサーバー側の検証を行いました。 urlmon.dllはドットネットライブラリ内の内部DLLであり、その参照を追加するだけです。 – Harun

+0

すべての.I定番のバリデータを使用して簡単に解決し、拡張パターンが一致することを確認することで解決します:) – SMK

1

ファイルフォーマットの仕様に従ってファイル全体を実際に解析し、すべてが適合していることを確認する唯一の方法があります。

ほとんどのバイナリファイル形式は、最初に何らかの形式のヘッダまたはmagic numberがあり、確認することができます。

0

Uploadifyのようなコンポーネントを使用すると、アップロードする前に選択できるファイルの種類が制限されます。

+0

を確認してみましょう – SMK

関連する問題