2008-09-17 16 views

答えて

22

:分離コード(C#の)中

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

:ファイルの名前が変更し、アップロードされている場合

string contentType = FileUpload1.PostedFile.ContentType 
12

上記のコードは、正しいコンテンツタイプを与えることはありません。

aneeshは、HTTPリクエストのコンテンツタイプが正しくないかもしれないことを言っ正しいですが、私は管理対象外の呼び出しのためのマーシャリングが価値があるとは思わないこと

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

ためにこのコードを使用してくださいそれ。 Extension-to-Mimetypeマッピングに戻す必要がある場合は、System.Web.MimeMapping.cctor(Reflectorを使用)からコードを単に「借りる」だけです。この辞書によるアプローチは十分であり、ネイティブコールを必要としません。

+1

この時点で、System.Web.MimeMapping.GetMimeMapping()関数はpublicであり、直接呼び出すことができます。 –

関連する問題