.NET内のファイルの署名がファイルMIMEタイプを決定しました正しい処理と操作には、ファイルを正確に識別するMIMEタイプが不可欠です。ファイル拡張機能が不足しているか、間違っている場合、ファイルの署名がファイルタイプに依存して、ファイルタイプを正確に決定する必要があります。この記事では、.NETでこの機能を達成する方法について説明します。 urlmon.dll
を使用したソリューション
urlmon.dllライブラリを使用して提供されるソリューションは、ファイルの署名に基づいてmimeタイプを抽出します。この方法は、次の手順で実装できます。必要なアセンブリセットを紹介します:
findMimeFromData関数を定義します:
<code class="language-csharp">using System.Runtime.InteropServices;</code>
<code class="language-csharp">[DllImport(@"urlmon.dll", CharSet = CharSet.Auto)] private static extern uint FindMimeFromData( uint pBC, [MarshalAs(UnmanagedType.LPStr)] string pwzUrl, [MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer, uint cbSize, [MarshalAs(UnmanagedType.LPStr)] string pwzMimeProposed, uint dwMimeFlags, out uint ppwzMimeOut, uint dwReserverd );</code>
上記のコードフラグメントでは、ファイルを
配列に読み取る最初の256バイトなど、一部のコードは省略されていることに注意してください。 完全な実装には、必要なエラー処理とファイルの読み取りロジックが必要です。 さらに、メソッドの使用はオペレーティングシステムに依存する可能性があり、異なる環境で互換性の問題が存在する可能性があります。 より安定したソリューションは、他の.NETライブラリの使用を検討するか、それ自体でファイル署名分析を実装する必要がある場合があります。<code class="language-csharp">public static string GetMimeFromFile(string filename) { // 为简洁起见,省略文件验证 byte[] buffer = new byte[256]; //... try { uint mimetype; FindMimeFromData(0, null, buffer, 256, null, 0, out mimetype, 0); IntPtr mimeTypePtr = new IntPtr(mimetype); string mime = Marshal.PtrToStringUni(mimeTypePtr); Marshal.FreeCoTaskMem(mimeTypePtr); return mime; } catch (Exception e) { return "unknown/unknown"; } }</code>
以上が.NETでファイル署名を使用してファイルのMIMEタイプを決定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。