How should I detect the MIME type of an uploaded file in ASP.NET? How should I detect the MIME type of an uploaded file in ASP.NET? asp.net asp.net

How should I detect the MIME type of an uploaded file in ASP.NET?


in the aspx page:

<asp:FileUpload ID="FileUpload1" runat="server" />

in the codebehind (c#):

string contentType = FileUpload1.PostedFile.ContentType


The above code will not give correct content type if file is renamed and uploaded.

Please use this code for that

using System.Runtime.InteropServices;[DllImport("urlmon.dll", CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = false)]static extern int FindMimeFromData(IntPtr pBC,    [MarshalAs(UnmanagedType.LPWStr)] string pwzUrl,    [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.I1, SizeParamIndex = 3)] byte[] pBuffer,    int cbSize,    [MarshalAs(UnmanagedType.LPWStr)] string pwzMimeProposed,    int dwMimeFlags, out IntPtr ppwzMimeOut, int dwReserved);public static string getMimeFromFile(HttpPostedFile file){    IntPtr mimeout;    int MaxContent = (int)file.ContentLength;    if (MaxContent > 4096) MaxContent = 4096;    byte[] buf = new byte[MaxContent];    file.InputStream.Read(buf, 0, MaxContent);    int result = FindMimeFromData(IntPtr.Zero, file.FileName, buf, MaxContent, null, 0, out mimeout, 0);    if (result != 0)    {        Marshal.FreeCoTaskMem(mimeout);        return "";    }    string mime = Marshal.PtrToStringUni(mimeout);    Marshal.FreeCoTaskMem(mimeout);    return mime.ToLower();}


While aneesh is correct in saying that the content type of the HTTP request may not be correct, I don't think that the marshalling for the unmanaged call is worth it. If you need to fall back to extension-to-mimetype mappings, just "borrow" the code from System.Web.MimeMapping.cctor (use Reflector). This dictionary approach is more than sufficient and doesn't require the native call.