¿Cómo debo detectar el tipo MIME de un archivo cargado en ASP.NET?
Pregunta
¿Cómo la gente suele detectar el tipo MIME de un archivo cargado en el uso de ASP.NET?
Solución
en la página aspx:
<asp:FileUpload ID="FileUpload1" runat="server" />
en el código subyacente (c#):
string contentType = FileUpload1.PostedFile.ContentType
Otros consejos
El código anterior no dará tipo de contenido correcto si el archivo cambia de nombre y se cargan.
Por favor, use este código para que
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();
}
Mientras aneesh es correcto afirmar que el tipo de contenido de la petición HTTP puede no ser correcta, no creo que la movilización por el no administrado llamada vale la pena.Si usted necesita para volver a caer a la extensión-a-mimetype asignaciones, sólo "tomar prestado" el código del Sistema.Web.MimeMapping.cctor (uso del Reflector).Este diccionario enfoque es más que suficiente y no requiere que el nativo de la llamada.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow