[Astuce] Deviner le type MIME d’un FileInfo
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 » :
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 😉