كيف يمكنني اكتشاف نوع 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 قد لا يكون صحيحًا، إلا أنني لا أعتقد أن تنظيم المكالمة غير المُدارة يستحق ذلك.إذا كنت بحاجة إلى الرجوع إلى تعيينات الامتداد إلى نوع mimetype، فما عليك سوى "استعارة" التعليمات البرمجية من System.Web.MimeMapping.ccctor (استخدم العاكس).يعد أسلوب القاموس هذا أكثر من كافٍ ولا يتطلب الاتصال الأصلي.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top