Touver le bon MimeType pour son fichier

Lors d’un développement que j’ai eu à faire récemment, je me suis posé la question suivante : Quel est le MIME type du fichier que je suis sur le point d’envoyer en réponse?

Un MIME type (Ou Content-Type, c’est selon) est l’un des mécanismes important lorsqu’il est temps de distribuer le contenu au client. C’est ce qui permet d’identifier le type de contenu que le serveur vous envoie. Pourtant, de mémoire, je ne pourrais qu’en nommer deux ou trois tout au plus.

Si vous n’êtes pas plus capable de moi d’en nommer par cœur, rassurez-vous car il s’agit de quelque chose qui est normalement géré par votre serveur web.

Pour ceux qui sont du genre à lire des RFC, le RFC 2046 est celui qui définit le standard appelé : Multipurpose Internet Mail Extensions (MIME). Il met sur la table tout ce qui est nécessaire afin d’être en mesure de transférer un fichier binaire à travers un courriel qui est transféré uniquement en texte.

Le concept a été initialement prévu pour le courriel. Son utilisation a été étendue à d’autre protocoles incluant HTTP, comme dans le cas qui nous intéresse.

Prenons en exemple une réponse typique d’une requête à http://en.wikipedia.org/wiki/Internet_media_type.


HTTP/1.0 304 Not Modified
Date: Wed, 09 May 2012 00:26:52 GMT
Content-Type: text/html; charset=UTF-8
Last-Modified: Tue, 08 May 2012 23:51:26 GMT
Age: 113
X-Cache: HIT from cp1015.eqiad.wmnet
X-Cache-Lookup: HIT from cp1015.eqiad.wmnet:3128
X-Cache: MISS from cp1011.eqiad.wmnet
X-Cache-Lookup: MISS from cp1011.eqiad.wmnet:80
Connection: keep-alive

view raw

HTTP Request

hosted with ❤ by GitHub

À la ligne trois, l’identifiant Content-Type nous indique à quel type de contenu auquel nous avons face. Dans ce cas-ci, il s’agit d’une simple page HTML utilisant l’encodage UTF-8.

Le Content-Type est composé de trois éléments sous le format suivant : Type / Sous-Type; charset=Encodage. Sachez que l’encodage est optionnel.

La problématique à résoudre

Il est essentiel d’identifier son fichier lorsqu’on l’envoie au client au risque que ce qui est envoyé va être soit ouvert par la mauvaise application ou même simplement affiché comme un flux binaire à l’écran. Ce qui n’est pas vraiment très très utile.

Il existe plusieurs façon d’arriver à sa fin pour l’identification de son Content-Type. Les façons se résument à :

Ce que j’ai préféré faire

Étant un paresseux de nature, j’ai préféré y aller vers une solution sollicitant le moins d’effort possible. Mes recherches m’ont dirigé vers le repository Github nommé csharp-MimeType-Dictionnary.

Mon premier réflexe a été de me demander pourquoi je n’y avait pas pensé avant? L’idée aussi d’extraire le catalogue des MimeTypes d’un site pour les mettre dans un Dictionnaire par la suite!

L’utilisation de cette librairie est comme vous le comprendrez est très simple :

var mime = MimeTypeDictionary["pdf"]

Sans révolutionner le monde du développement web, ce dictionnaire permet rapidement d’avoir accès au MimeType d’un fichier donné sans avoir à le rechercher sur internet. Pour moi, il s’agit d’une économie de temps. Moins que je passe de temps à chercher de l’information plus je suis productif.

Une fois de plus, il faut remercier internet. :)

Publicité

Auteur : Pascal Paradis

Je suis les mains et le cerveau derrière http://frenchcoding.com. Je développe des microservices chez @UbisoftMTL. Amateur de Hockey et j'aime la technologie, en général.

Une réflexion sur “Touver le bon MimeType pour son fichier”

Laisser un commentaire

Entrer les renseignements ci-dessous ou cliquer sur une icône pour ouvrir une session :

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

%d blogueueurs aiment cette page :