public class MimeHelper { public static int MimeSampleSize = 256; public static string DefaultMimeType = "application/octet-stream"; [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 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; } } }