Asp.net-Mvc
在 C# 中,如何從 byte[] 中知道文件類型?
我有一個從上傳的文件填充的字節數組。但是,在程式碼的另一部分,我需要知道從 byte[] 上傳的文件類型,以便將正確的內容類型呈現給瀏覽器!
謝謝!!
不確定,但也許你應該調查一下幻數。
更新: 閱讀它,但我認為它不是很可靠。
如前所述,MIME 魔法是做到這一點的唯一方法。許多平台提供了最新且強大的 MIME 魔術文件和程式碼來有效地執行此操作。在沒有任何 3rd 方程式碼的情況下在 .NET 中執行此操作的唯一方法是使用
FindMimeFromDataurlmon.dll。這是如何做:public static int MimeSampleSize = 256; public static string DefaultMimeType = "application/octet-stream"; [DllImport(@"urlmon.dll", CharSet = CharSet.Auto)] private extern static 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 ); public static string GetMimeFromBytes(byte[] data) { try { uint mimeType; FindMimeFromData(0, null, data, (uint)MimeSampleSize, null, 0, out mimeType, 0); var mimePointer = new IntPtr(mimeType); var mime = Marshal.PtrToStringUni(mimePointer); Marshal.FreeCoTaskMem(mimePointer); return mime ?? DefaultMimeType; } catch { return DefaultMimeType; } }這使用 Internet Explorer MIME 檢測器。這與 IE 用於發送 MIME 類型和上傳文件的程式碼相同。您可以看到urlmon.dll 支持的 MIME 類型列表。
image/pjpeg需要注意的一件事是image/x-png哪些是非標準的。在我的程式碼中,我將這些替換為image/jpegandimage/png。