Pregunta

¿Cómo la gente suele detectar el tipo MIME de un archivo cargado en el uso de ASP.NET?

¿Fue útil?

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
scroll top