How do people usually detect the MIME type of an uploaded file using ASP.NET?
Asked
Active
Viewed 3.2k times
4 Answers
26
in the aspx page:
<asp:FileUpload ID="FileUpload1" runat="server" />
in the codebehind (c#):
string contentType = FileUpload1.PostedFile.ContentType

Kinjal Dixit
- 7,777
- 2
- 59
- 68
14
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();
}

Hosam Aly
- 41,555
- 36
- 141
- 182
10
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.

Richard Szalay
- 83,269
- 19
- 178
- 237
-
1At this point in time, the System.Web.MimeMapping.GetMimeMapping() function is public and can be called directly. – quentin-starin Oct 20 '14 at 16:43
0
Get MIME type from a file in ASP.NET Core
public string GetMimeType(string filePath)
{
var provider = new FileExtensionContentTypeProvider();
if (!provider.TryGetContentType(filePath, out var contentType))
contentType = "application/octet-stream"; // fallback: unknown binary type
return contentType;
}

Morten Brudvik
- 439
- 5
- 10