ASP.NET에서 업로드된 파일의 MIME 유형을 어떻게 감지해야 합니까?

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

  •  09-06-2019
  •  | 
  •  

문제

사람들은 일반적으로 ASP.NET을 사용하여 업로드된 파일의 MIME 유형을 어떻게 감지합니까?

도움이 되었습니까?

해결책

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

HTTP 요청의 콘텐츠 유형이 정확하지 않을 수 있다는 aneesh의 말은 정확하지만 관리되지 않는 호출에 대한 마샬링은 그만한 가치가 있다고 생각하지 않습니다.확장-Mimetype 매핑으로 대체해야 하는 경우 System.Web.MimeMapping.cctor에서 코드를 "빌려"만 사용하면 됩니다(Reflector 사용).이 사전 접근 방식은 충분하며 기본 호출이 필요하지 않습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top