[Astuce] Deviner le type MIME d’un FileInfo

18 mars 2009

Depuis la nouvelle CTP du Live Framework vous avez remarqué qu’on était désormais « obligé » de passer le type MIME d’un fichier que l’on ajoute via la méthode DataEntryCollection.Add/AddAsync (voir mon post précédent).

Pour récupérer le type MIME d’un fichier, le plus simple est de regarder dans le HKEY_CLASSES_ROOT du registre pour récupérer la clé ayant pour nom l’extension et de regarder la valeur du « Content Type » :

image

Côté code, voici comment faire cela simplement :

1
2
  var fileClass = Registry.ClassesRoot.OpenSubKey(".jpg");
  var contentType = fileClass.GetValue("Content Type").ToString();

A l’exécution contentType vaudra « image/jpeg », le type MIME d’un fichier .JPG !

Afin de faciliter nos développements, nous pouvons, à partir de ces deux lignes de code, créer une méthode d’extension sur la classe FileInfo. Voici son code :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
  using System.IO;
  using Microsoft.Win32;
 
  public static class MimeTypeExtension
  {
      public static string GetMimeType(this FileInfo fileInfo)
      {
          var contentType = "application/octet-stream";
          try {
              var fileClass = Registry.ClassesRoot.OpenSubKey(fileInfo.Extension);
              contentType = fileClass.GetValue("Content Type").ToString();
          } catch { }
          return contentType;
      }
  }

De façon a pouvoir l’utiliser simplement de la manière suivante :

1
2
FileInfo fileInfo = new FileInfo({MON_FICHIER});
Console.WriteLine("Filename: {0} - Type MIME : {1}", fileInfo.Name, fileInfo.GetMimeType());

Vous remarquerez que si le type MIME n’est pas trouvé nous renverrons un « application/octet-stream« .

Bon développement ;)

Ajouter un commentaire