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

Исключение нулевого указателя генерируется, когда приложение пытается использовать null в случае, когда требуется объект. К ним относятся:

  1. Вызов метода экземпляра объекта null.
  2. Доступ или изменение поля объекта null.
  3. Принимая длину null, как если бы это был массив.
  4. Доступ или изменение слотов null, как если бы это был массив.
  5. Бросок null как будто это было значение Throwable.

Приложения должны бросать экземпляры этого класса, чтобы указать на другие незаконные использования объекта null.

Ссылка: http://docs.oracle.com/javase/8/docs/api/java/lang/NullPointerException.html

24
задан TRiG 21 July 2015 в 14:44
поделиться

3 ответа

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

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

в коде (c #):

string contentType = FileUpload1.PostedFile.ContentType
24
ответ дан Kinjal Dixit 28 November 2019 в 23:21
поделиться

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

10
ответ дан Richard Szalay 28 November 2019 в 23:21
поделиться

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

Используйте этот код для that

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();
}
13
ответ дан 28 November 2019 в 23:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: