2010-06-24 11 views
11

¿Hay alguna forma mejor de configurar los tipos de mimet en C# que la que estoy tratando de hacer gracias de antemano.Configuración de MimeType en C#

static String MimeType(string filePath) 
{ 
    String ret = null; 
    FileInfo file = new FileInfo(filePath); 

    if (file.Extension.ToUpper() == ".PDF") 
    { 
    ret = "application/pdf"; 
    } 
    else if (file.Extension.ToUpper() == ".JPG" || file.Extension.ToUpper() == ".JPEG") 
    { 
    ret = "image/jpeg"; 
    } 
    else if (file.Extension.ToUpper() == ".PNG") 
    { 
    ret = "image/png"; 
    } 
    else if (file.Extension.ToUpper() == ".GIF") 
    { 
    ret = "image/gif"; 
    } 
    else if (file.Extension.ToUpper() == ".TIFF" || file.Extension.ToUpper() == ".TIF") 
    { 
    ret = "image/tiff"; 
    } 
    else 
    { 
    ret = "image/" + file.Extension.Replace(".", ""); 
    } 

    return ret; 
} 
+2

Todavía no entiendo por qué la gran colección de tipos MIME, que utiliza MS en System.Web no ha sido puesta a disposición del público a mi hacer la clase interna. .. todo el mundo está codificando su propio método para obtener el tipo de mimo de un nombre de archivo y solo muy pocos lo están haciendo bien. – Lucero

+1

posible duplicado de [¿Cómo obtengo el tipo MIME de un archivo solicitado en ASP.NET C#?] (Http://stackoverflow.com/questions/1302264/how-do-i-get-the-mime-type -of-a-file-being-requested-in-asp-net-c) – Lucero

+1

También hay [Usando .NET, ¿cómo se puede encontrar el tipo mime de un archivo basado en la firma del archivo, no la extensión. ] (http://stackoverflow.com/questions/58510/using-net-how-can-you-find-the-mime-type-of-a-file-based-on-the-file-signature) – R0MANARMY

Respuesta

15

me dieron esto desde this entrada de blog:

private string GetMimeType (string fileName) 
{ 
    string mimeType = "application/unknown"; 
    string ext = System.IO.Path.GetExtension(fileName).ToLower(); 
    Microsoft.Win32.RegistryKey regKey = Microsoft.Win32.Registry.ClassesRoot.OpenSubKey(ext); 
    if (regKey != null && regKey.GetValue("Content Type") != null) 
    mimeType = regKey.GetValue("Content Type").ToString(); 
    return mimeType; 
} 
+2

Iba a sugerir el registro. Sin embargo, si se está ejecutando en modo de confianza parcial, creo que debe otorgar explícitamente el acceso al registro, de lo contrario será rechazado. Probablemente también almacenaré en caché las solicitudes en su aplicación en lugar de realizar consultas en todo momento, pero eso se debe más a la inquietud general de llamar al registro en lugar de a los datos. Tal vez también vale la pena señalar: en lugar de la aplicación/desconocido, IIS se negará a servir un archivo si no hay un tipo de contenido de registro. – Rup

3

Si no tiene acceso de registro o no desea utilizar el registro, siempre puede usar un diccionario para eso.

Dictionary<string,string> mimeTypes = new Dictionary<string,string>() { 
{ ".PDF","application/pdf"}, 
{ ".JPG", "image/jpeg" }, 
{ ".JPEG", "image/jpeg" } }; // and so on 

A continuación, utilice:

string mimeType = mimeTypes[fileExtension]; 

Además, podría almacenar estas asignaciones en un archivo XML y almacenar en caché con una dependencia de archivo, en lugar de mantenerlos en su código.

+1

Still necesita ser codificado, creo que la pregunta es acerca de usar una API existente en lugar de tener otra implementación. – R0MANARMY

4

Un Dictionary<String,String> puede llegar a ser más clara.

private static Dictionary<String, String> mtypes = new Dictionary<string, string> { 
     {".PDF", "application/pdf" }, 
     {".JPG", "image/jpeg"}, 
     {".PNG", "image/png"}, 
     {".GIF", "image/gif"}, 
     {".TIFF","image/tiff"}, 
     {".TIF", "image/tiff"} 
    }; 

static String MimeType(String filePath) 
{ 
    System.IO.FileInfo file = new System.IO.FileInfo(filePath); 
    String filetype = file.Extension.ToUpper(); 
    if(mtypes.Keys.Contains<String>(filetype)) 
     return mtypes[filetype]; 
    return "image/" + filetype.Replace(".", "").ToLower(); 
} 
9

Solo se necesita esta línea para hacerlo.

System.Web.MimeMapping.GetMimeMapping(FileName) 

Nota: Es .NET 4.5+ única

+0

Es posible que desee incluir el comentario de Rup en su respuesta (enlace a los documentos y que es 4.5+). – R0MANARMY

Cuestiones relacionadas