Domanda

In che modo le persone solitamente rilevano il tipo MIME di un file caricato utilizzando ASP.NET?

È stato utile?

Soluzione

nella pagina aspx:

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

nel codice sottostante (c#):

string contentType = FileUpload1.PostedFile.ContentType

Altri suggerimenti

Il codice precedente non fornirà il tipo di contenuto corretto se il file viene rinominato e caricato.

Per favore usa questo codice per questo

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();
}

Anche se aneesh ha ragione nel dire che il tipo di contenuto della richiesta HTTP potrebbe non essere corretto, non penso che valga la pena effettuare il marshalling per la chiamata non gestita.Se è necessario ricorrere alle mappature estensione-tipo mime, è sufficiente "prendere in prestito" il codice da System.Web.MimeMapping.cctor (utilizzare Reflector).Questo approccio del dizionario è più che sufficiente e non richiede la chiamata nativa.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top