ASP.NET を使用して、アップロードされたファイルの MIME タイプを通常どのように検出しますか?
30552 次
3 に答える
25
in the aspx page:
<asp:FileUpload ID="FileUpload1" runat="server" />
in the codebehind (c#):
string contentType = FileUpload1.PostedFile.ContentType
于 2008-09-17T09:04:40.593 に答える
13
ファイルの名前を変更してアップロードすると、上記のコードは正しいコンテンツ タイプを提供しません。
そのためにこのコードを使用してください
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();
}
于 2009-08-06T12:02:06.117 に答える
10
HTTP 要求のコンテンツ タイプが正しくない可能性があるという aneesh の発言は正しいですが、アンマネージド コールのマーシャリングに価値があるとは思えません。拡張機能から MIME タイプへのマッピングにフォールバックする必要がある場合は、System.Web.MimeMapping.cctor からコードを「借りる」だけです (Reflector を使用します)。このディクショナリ アプローチは十分すぎるほどであり、ネイティブ コールは必要ありません。
于 2009-11-29T00:48:23.230 に答える