Como devo detectar o tipo MIME de um arquivo carregado em ASP.NET?
Pergunta
Como é que as pessoas geralmente detectar o tipo MIME de um arquivo carregado usando ASP.NET?
Solução
na página aspx:
<asp:FileUpload ID="FileUpload1" runat="server" />
no code-behind (c#):
string contentType = FileUpload1.PostedFile.ContentType
Outras dicas
O código acima não vai dar tipo de conteúdo correto se o arquivo é renomeado e carregado.
Por favor, use este código para que
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();
}
Enquanto aneesh está correto em dizer que o tipo de conteúdo do HTTP request pode não estar correta, eu não acho que o empacotamento para não gerenciado chamada é pena.Se você precisa de cair de volta para a extensão-para-mimetype mapeamentos, apenas "emprestado" o código do Sistema.Da Web.MimeMapping.cctor (uso do Refletor).Este dicionário abordagem é mais do que suficiente e não exige a chamada nativa.
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow