Personal tools
You are here: Home Symfony loadertool-une-classe-symfony-specialisee-dans-le-telechargement-en
Document Actions
  • Send this page to somebody
  • Print this page
  • Add Bookmarklet

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

by Pierre-Yves Landuré last modified 2011-09-20 15:26

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.

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

 

Attachments

Merci !

Posted by Keroth at 2009-06-24 07:15
Bonjour !

Merci pour cette classe qui me paraît fort intéressante !
Je vais de ce pas la regarder et la tester !

Keroth

Merci

Posted by John at 2009-10-28 13:23
Merci bcp! Je galère depuis ce matin pour forcer le téléchargement d'un fichier sous symfony ... impossible.

Avec ta classe, 1 ligne et hop! magie! ;-)

Bravo!

remerciement

Posted by toofff at 2010-04-02 15:19
Merci beaucoup pour ta classe, elle est vraiment magique que ça soit pour symfony ou pour un développement plus simple.

Un énorme bravo!!!

Super!

Posted by Ludo at 2011-02-09 17:42
Est-ce que ça fonctionne avec Symfony 1.4?
Après analyse, ça devrait fonctionner, mais malheureusement la classe ne focntionnera pas sans PHP >= 5.3 (fonctions Finfo).

Un grand merci !

Posted by Tadpole at 2011-04-28 09:33
Un grand merci pour le partage d'une classe de ce type,

" Le savoir n'est bon que s'il est partagé. "

Bonne continuation :)

Deprecated: Function split() is deprecated

Posted by Tadpole at 2011-04-28 10:15
Une erreur peut intervenir lors de l'utilisation de la classe du type :
"Deprecated: Function split() is deprecated ..."

Pour corriger cette erreur, il faut remplacer dans le fichier LoaderTool.class.php ( à la ligne 144 ) :
- list($mime_type_major, $mime_type_minor) = split('/', $mime_type);

par :
- list($mime_type_major, $mime_type_minor) = explode('/', $mime_type);

si cela peut aider quelqu'un :)

__mm_c(O_O)c_mm__

Ajouter la bibliothèque externe

Posted by Abde at 2015-05-21 15:32
Merci pour votre sujet.
Mais j'ai un problème lorsque je veux ajouter la classe au "lib",
je sais pas comment je peut l'ajouter au symfony 2.3 ??
Merci d'avance pour votre réponse :)

Que mettre dans la vue

Posted by oumda at 2011-07-01 10:52
Que dois-je mettre dans la vue pour avoir un lien vers le téléchargement

Ajouter la bibliothèque externe

Posted by Abde at 2015-05-21 15:34
Salùt, j'ai un problème lorsque je veux ajouter la bibliothèque (ou bien la classe LoaderTool.class.php)
je sais pas comment je peut l'ajouter au symfony 2.3 !!
Merci d'avance pour votre réponse :)


Powered by Plone CMS, the Open Source Content Management System

This site conforms to the following standards:

Wikio