基於 .NET 中的簽名確定文件 MIME 類型
準確識別文件的 MIME 類型對於正確的處理和操作至關重要。當文件擴展名缺失或不正確時,就必須依靠文件簽名來準確確定文件類型。本文探討如何在 .NET 中實現此功能。
使用 urlmon.dll 的解決方案
提供的解決方案使用 urlmon.dll 庫根據文件簽名提取 MIME 類型。此方法可以通過以下步驟實現:
導入必要的程序集:
using System.Runtime.InteropServices;
定義 FindMimeFromData 函數:
[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 );
創建一個從文件檢索 MIME 類型的函數:
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"; } }
使用 GetMimeFromFile 函數獲取 MIME 類型:
string mimeType = GetMimeFromFile("myfile.unknown");
請注意,上述代碼片段中省略了部分代碼,例如讀取文件的前 256 個字節到 buffer
數組中。 完整的實現需要添加必要的錯誤處理和文件讀取邏輯。 此外,使用 urlmon.dll
的方法可能依賴於操作系統,在不同環境下可能存在兼容性問題。 更穩健的解決方案可能需要考慮使用其他 .NET 庫或自行實現文件簽名解析。
以上是如何使用.NET中的文件簽名確定文件的MIME類型?的詳細內容。更多資訊請關注PHP中文網其他相關文章!