У меня есть страница профиля пользователя, которая отображает аватар пользователя и позволяет им загружать новый.Загрузка файла загрузки 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;
}
}
}
, к сожалению, это возвращая недействительный MIME, даже если я знаю, что он действителен (т.е. я загружаю действительное изображение .png, но получаю недействительный возврат)
любые предложения о том, где я ошибаюсь?
Замечательный ответ - я получил типы из списка, который имел «.x-png» в качестве расширения файла, но все еще имел тип mime как «image/png». добавили «image/x-png» в качестве типа mime для проверки, и он работает. спасибо за помощь – Dave