0
我有一個用戶配置文件頁面,顯示用戶的頭像,並允許他們上傳一個新的。asp.net文件上傳檢查總是返回無效的MIME類型
當用戶點擊上傳時,我想在決定是否上傳之前檢查發佈文件的MIME類型。
這全部包含在父配置文件頁面內的用戶控件中。
我的用戶控制:
<asp:ImageButton ID="imgAvatar" runat="server" OnClick="imgAvatar_Click" />
<asp:FileUpload ID="fluFileUpload" runat="server" AllowMultiple="false" />
<asp:Button ID="btnFileUpload" runat="server" Text="Upload" OnClick="btnFileUpload_Click" />
<asp:Button ID="btnCancelUpload" runat="server" Text="Cancel" OnClick="btnCancelUpload_Click" />
我的上傳按鈕後面的代碼:
protected void btnFileUpload_Click(object sender, EventArgs e)
{
if(fluFileUpload.HasFile)
{
HttpPostedFile avatar = fluFileUpload.PostedFile;
bool validmime = validUpload(avatar);
if (validmime)
{
//handling valid upload
}
else
{
//handling invalid upload
}
}
else
{
//handling no file
}
}
我檢查的MIME類型的處理程序:
[DllImport(@"urlmon.dll", CharSet = CharSet.Auto)]
private extern static System.UInt32 FindMimeFromData(System.UInt32 pBC,
[MarshalAs(UnmanagedType.LPStr)] System.String pwzUrl,
[MarshalAs(UnmanagedType.LPArray)] byte[] pBuffer,
System.UInt32 cbSize, [MarshalAs(UnmanagedType.LPStr)] System.String pwzMimeProposed,
System.UInt32 dwMimeFlags,
out System.UInt32 ppwzMimeOut,
System.UInt32 dwReserverd);
public static bool validUpload (HttpPostedFile postedFile)
{
HttpPostedFile file = postedFile;
byte[] document = new byte[file.ContentLength];
file.InputStream.Read(document, 0, file.ContentLength);
System.UInt32 mimetype;
FindMimeFromData(0, null, document, 256, null, 0, out mimetype, 0);
System.IntPtr mimeTypePtr = new IntPtr(mimetype);
string mime = Marshal.PtrToStringUni(mimeTypePtr);
Marshal.FreeCoTaskMem(mimeTypePtr);
if (mime == "image/png" || mime == "image/jpeg" || mime == "image/pjpeg")
{
//file is valid
return true;
}
else
{
//file is invalid
return false;
}
}
}
不幸的是,這是返回一個無效甚至當我知道它是有效的(即我正在上傳一個有效的.png圖像,但得到一個無效退貨)
有關我哪裏出錯的建議嗎?
太棒了,這就是答案 - 我從列表中獲得了「.x-png」作爲文件擴展名,但仍然將MIME類型設置爲「image/png」的類型。已經添加了「image/x-png」作爲一個MIME類型來檢查它是否工作。非常感謝您的幫助 – Dave