2008-09-17 12 views

Répondre

22

dans la page ASPX:

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

dans le behind (C#):

string contentType = FileUpload1.PostedFile.ContentType 
12

Le code ci-dessus ne donnera pas le type de contenu correct si le fichier est renommé et téléchargé.

S'il vous plaît utiliser ce code pour 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(); 
} 
10

Alors que aneesh a raison de dire que le type de contenu de la requête HTTP peut ne pas être correcte, je ne pense pas que le rassemblement pour l'appel non géré vaut la peine il. Si vous avez besoin de retomber sur les mappages extension-mimetype, utilisez simplement le code de System.Web.MimeMapping.cctor (utilisez Reflector). Cette approche du dictionnaire est plus que suffisante et ne nécessite pas l'appel natif.

+1

À ce stade, la fonction System.Web.MimeMapping.GetMimeMapping() est publique et peut être appelée directement. –

Questions connexes