Как я должен определить тип MIME загруженного файла в ASP.NET?

StackOverflow https://stackoverflow.com/questions/81283

  •  09-06-2019
  •  | 
  •  

Вопрос

Как люди обычно определяют MIME-тип загруженного файла с помощью ASP.NET?

Это было полезно?

Решение

на странице aspx:

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

в исходном коде (c #):

string contentType = FileUpload1.PostedFile.ContentType

Другие советы

Приведенный выше код не даст правильного типа содержимого, если файл будет переименован и загружен.

Пожалуйста, используйте для этого этот код

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

Хотя aneesh прав, говоря, что тип содержимого HTTP-запроса может быть неправильным, я не думаю, что маршалинг для неуправляемого вызова того стоит.Если вам нужно вернуться к сопоставлениям extension-to-mimetype, просто "позаимствуйте" код из System.Web.MimeMapping.cctor (используйте Reflector).Такого словарного подхода более чем достаточно и не требует собственного вызова.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top