Vous êtes ici : Accueil / Développement / Symfony 1.0 / LoaderTool : une classe Symfony 1.0 spécialisée dans le téléchargement

LoaderTool : une classe Symfony 1.0 spécialisée dans le téléchargement

Par Pierre-Yves Landuré Dernière modification 08/09/2011 18:57

Je travaille actuellement sur une application proposant de nombreux fichiers au téléchargement. Dans ce cadre, il m'a pris l'envie de centraliser toutes les fonctions liées aux téléchargements dans une seule et même classe : LoaderTool est née. Cette classe est destinée aux applications utilisant le framework Symfony 1.0.

Ce guide est testé sur:

  • Symfony 1.0

En premier lieu, téléchargez le fichier LoaderTool.class.php associé à cet article, et placez le dans un des dossiers "lib" de votre projet Symfony.

Remarque : Vous pouvez aussi être intéressés par :

A l'aide de cette classe, vous disposez de plusieurs modes de téléchargements :

Téléchargement simple

Si vous souhaitez simplement présenter en téléchargement pour l'utilisateur un fichier présent sur votre disque dur, vous pouvez utiliser :

$filename = '/chemin/vers/mon/fichier.xls'
LoaderTool::downloadContent($filename);

LoaderTool se charge de détecter le type MIME du fichier, et de le proposer à l'utilisateur avec pour nom le nom du fichier sur le disque de votre serveur (ici : fichier.xls).

Téléchargement avec un nom personnalisé

Dans cet exemple, nous proposons à nouveau le fichier "fichier.xls", mais cette fois ci, nous présentons un nom différent à l'utilisateur : 'export.xls'.

$filename = '/chemin/vers/mon/fichier.xls'
LoaderTool::downloadContent($filename, 'export.xls');

LoaderTool se charge de détecter le type MIME du fichier, et de le proposer à l'utilisateur avec pour nom le deuxième paramètre de la méthode downloadContent.

Téléchargement "en ligne"

Si vous souhaitez que le contenu de votre fichier s'affiche directement dans le navigateur, au lieu que son téléchargement soit proposé à l'utilisateur, il faut activer le téléchargement "inline". Pour ce faire, utilisez le troisième paramètre de la méthode downloadContent  :

$filename = '/chemin/vers/mon/fichier.pdf'
LoaderTool::downloadContent($filename, null, True);

Dans cet exemple, le fichier PDF téléchargé s'ouvre directement dans le navigateur de l'utilisateur si un "plugin" de lecture de PDF est installé dans le navigateur (c'est souvent le cas sur les postes utilisant Microsoft Windows).

Téléchargement avec un type MIME différent

Si vous le souhaitez, il est possible de forcer le type MIME du téléchargement. Par exemple, pour forcer le fichier a être présenté comme un fichier PDF :

$filename = '/chemin/vers/mon/un-fichier-quelconque'
LoaderTool::downloadContent($filename, 'fichier.pdf', False, 'application/pdf');

Quelque soit le type du fichier "un-fichier-quelconque", le navigateur le verra comme étant un fichier PDF. Utilisez cette fonctionnalité avec précaution.

Téléchargement d'un contenu en mémoire

Si vous souhaitez proposer au téléchargement un contenu généré par votre application PHP (par Imagick, GD, ou Tcpdf par exemple), il suffit de remplacer la variable $filename par $content qui contient le contenu. Le second paramètre "filename" devient alors obligatoire.

$contents = file_get_contents('/chemin/vers/mon/un-fichier-quelconque.pdf');
LoaderTool::downloadContent($contents, 'fichier.pdf');

Pour aller plus loin

Si vous utilisez le serveur Lighttpd pour votre application PHP, vous pouvez activer le support d'X-SendFile dans Lighttpd et configurer LoaderTool pour l'utiliser. Ajoutez simplement les lignes suivantes à votre app.yml :

    all:

...

      loadertool:
        enable_xsendfile: true