Obtener el “Content Type” de un archivo en base a su extensión

Qué es el “Content Type”, no es más que el tipo de contenido de un archivo. La definición de este tipo de contenido es utilizado con frecuencia para tareas utilizando aspectos relacionados con “MIME” (Multipurpose Internet Mail Extensions). Los tipos definidos de esta manera no solo son utilizado en los mensajes de correo electrónico, sin embargo el uso del campo “Content-Type” está definido por el estándar <a href=”http://www.faqs.org/rfcs/rfc2046.html” target=”_blank”>RFC 2046</a> , en el que en grandes rasgos, se recomienda el uso de un tipo y subtipo para definir el tipo de medio que se está enviando por correo electrónica ya sea como adjunto o como parte incrustada de un mensaje.
En el estándar mencionado se definen cinco tipos discretos de medios a saber: text, image, audio, video y application. Además se tienen dos tipos de composición de alto nivel que son: multipart y message.

Lo que nos atañe es el uso de los tipos discretos y cómo están vinculados con los archivos que usamos comúnmente y las aplicaciones.

En específico, la tarea de obtener el “Content-Type” de un archivo tiene gran relevancia cuando estamos enviando o publicando el mismo en Internet, más cuando es necesario para construir el encabezado que lo describe.

No es extenso este ejemplo solo describe la manera de consultar el registro de Windows, ya que en él se encuentran registradas las extensiones del archivo, en específico las que están en el equipo en cuestión.

La llave del registro que consultaremos será el HKEY_CLASSES_ROOT, misma que contiene descripción del contenido de archivos de una extensión de archivo. Por ejemplo:

El Content-Type de un archivo con extensión “.doc” será la que se describe en esta llave:
   HKEY_CLASSES_ROOT\.doc\Conten Type

La cual tiene el siguiente valor:
   application/msword

Veamos el ejemplo que utilicé para obtener este valor:

private string GetContentType(stringFileExtension)
{
   
// Convertimos la extensión en minúsculas
   
string ext = FileExtension.ToLower(
        System.Threading.Thread.CurrentThread.CurrentCulture);
   
// Verificamos que contenga el punto de
    // otra manera habría que agregarlo para
    // poder obtener los resultados esperados

   
if (!ext.StartsWith("."))
        ext = String.Concat(".", ext);
   
// Se declara un permisos pata obtener
    // acceso de solo lectura al registro
    // NOTA: Se está utilizando: using System.Security.Permissions;

    RegistryPermission Reg =
new RegistryPermission(
    RegistryPermissionAccess.Read, "HKEY_CLASSES_ROOT\\");
   
// Creamos un llave de registro para
    // HKEY_CLASSES_ROOT

    Microsoft.Win32.RegistryKey regKey =
        Microsoft.Win32.Registry.ClassesRoot;
   
// Intentamos crear una llave de registro
    // a partir de la extensión

    Microsoft.Win32.RegistryKey regKeyExt =
        regKey.OpenSubKey(ext);
   
// Si la extensión existe como sub llave de registro
    // entonces devolveremos su valor de lo contrario
    // se devuelve el valor predeterminado

   
if(regKeyExt == null)
       
return "application/octet-stream";
   
else
       
return regKeyExt.GetValue("Content Type",
    "application/octet-stream").ToString();
}

Este es solo un método que a partir de la extensión dada de un archivo, buscará información sobre el Content Type en el registro. Se devuelve el tipo predeterminado application/octet-stream si no se encuentra información referente al tipo del archivo en cuestión.

Espero sea de utilidad y les sea útil como a mí.

Saludos...

Octavio Telis

Published Saturday, February 17, 2007 3:19 AM by Octavio Telis Aynés
Filed under: , ,

Leave a Comment

(required) 
(required) 
(optional)
(required) 
Powered by Community Server (Commercial Edition), by Telligent Systems