2008-09-17 17 views

उत्तर

22
aspx पेज में

:

<asp:FileUpload ID="FileUpload1" runat="server" /> 
में codebehind (ग #)

:

string contentType = FileUpload1.PostedFile.ContentType 
12

ऊपर कोड सही सामग्री प्रकार यदि फ़ाइल का नाम बदला और अपलोड की गई है नहीं देंगे।

कि

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

के लिए इस कोड का उपयोग करें जबकि अनीश कह रही है कि HTTP अनुरोध की सामग्री प्रकार सही नहीं हो सकता है में सही है, तो मुझे नहीं लगता कि कि अप्रबंधित कॉल के लिए मार्शलिंग लायक है यह। यदि आपको एक्सटेंशन-टू-माइमटाइप मैपिंग पर वापस गिरने की आवश्यकता है, तो सिस्टम.Web.MimeMapping.cctor से कोड को "उधार" दें (प्रतिबिंबक का उपयोग करें)। यह शब्दकोश दृष्टिकोण पर्याप्त से अधिक है और मूल कॉल की आवश्यकता नहीं है।

+1

इस समय, सिस्टम.Web.MimeMapping.GetMimeMapping() फ़ंक्शन सार्वजनिक है और इसे सीधे कहा जा सकता है। –

संबंधित मुद्दे