HTML5 – Attribut download pour forcer le téléchargement d’une ressource

Cet article a 391 jours. Il commence à dater, lisez-le donc en gardant son âge en tête ! Merci

HTML5 download. Je vous parlais d’une solution pour forcer le téléchargement grâce à un morceau de code dans votre fichier .htaccess dans l’article précédent, alors que je venais juste de découvrir cet attribut HTML5 permettant de faire la même chose en mieux. Pour le moment seul Chrome supporte cet attribut.

Présentation de l’attribut download

En gros cet attribut permet de spécifier au navigateur qu’il ne doit pas se diriger (naviguer) vers la ressource ciblée, mais la télécharger.
Cet attribut s’applique donc naturellement un élément a et peut avoir une valeur qui sera attribuée comme nom de fichier à la ressource que vous allez télécharger.

Voici un exemple d’utilisation :

<a href="http://creativejuiz.fr/images/main.jpg" download="CreativeJuiz_Background">Télécharger l'image</a>

La valeur de l’attribut download n’a, a priori, aucune restriction, mais il faut avoir en tête qu’il s’agit d’un nom de fichier et que tous les systèmes ne sont pas égaux quant au traitement de certains signes de ponctuation (mais contredites-moi si je fais erreur). Vous remarquerez que j’ai écris « CreativeJuiz_Background » en nom de fichier, et non « CreativeJuiz_Background.jpg ». En effet il est inutile de préciser l’extension du fichier si vous souhaitez conserver l’originale.

La barre de téléchargement de Chrome après deux essais de l'attribut download

Si vous naviguez sur la dernière version de Chrome, ce lien de démo devrait vous proposer de télécharger un fichier .png : Télécharger l’image

La valeur de l’attribut download accepte également l’ajout d’une extension de fichier, il est ainsi possible de proposer au téléchargement un fichier HTML transformé en fichier TXT par exemple :

<a href="http://www.creativejuiz.fr/trytotry/css3-box-shadow-after-before/index.html" download="CreativeJuiz_DropShadow.txt">Télécharger le code (.txt)</a>

Ce qui nous donnerait le lien suivant : Télécharger le code (.txt)

Avis personnel

Cet attribut est plutôt intéressant en un sens, puisqu’il permet d’alléger le fichier .htaccess ou certains scripts en PHP.
Cependant, à l’image de l’attribut target aujourd’hui considéré comme une manière de contraindre le visiteur à naviguer d’une certaine manière, cet attribut download ne serait-il pas en train de reproduire ce schéma de contrainte en forçant un visiteur à télécharger une image (ou tout autre type de fichier) alors qu’il souhaite juste la visualiser dans son navigateur ? Il faudra voir cela à l’usage :)

22 commentaires sur “HTML5 – Attribut download pour forcer le téléchargement d’une ressource”

  1. Greg dit :
    23 avril 2012

    Pas mal cet attribut, jamais entendu parler x)
    C’est planqué quelque part dans la spécif HTML5 ou bien ?

    Il faudra étudier les possibilités mais je vois déjà un avantage à ceci : proposer au téléchargement le même fichier en plusieurs formats. Un seul fichier sur le serveur, mais un fichier txt, un html, un pdf, etc à DL :) (bon j’abuse un peu là ^^).

    Bref, merci pour l’article, bookmarké.

  2. Geoffrey dit :
    23 avril 2012

    C’est bizarrement bien planqué dans la documentation du WhatWG (attention HTML Living Standard, et non HTML5, m’enfin bon… :p)

    Merci pour la suggestion/lecture ;)

  3. Greg dit :
    23 avril 2012

    Je me doutais bien que ce ne serait pas encore dans la spécif HTML5. En revanche ça ne date pas d’hier, à voir l’un des liens en source de l’article, qui fate de plusieurs mois.
    C’est étrange qu’on n’en ai pas plus entendu parler que ça.

    Thx pour la doc WhatWG :)

  4. Geoffrey dit :
    23 avril 2012

    Ouais il y a des choses comme ça qui ont du mal à percer, qui sont abandonnées, puis reprises plus tard (exemple : @font-face).
    C’est pas nouveau mais ça me semblait pas trop mal d’en parler :)

  5. 24 avril 2012

    Comme tu dis si bien dans ton article, à l’image de l’attribut target, ça va vite être mis de côté je pense, même si ce n’est déjà fais puisque l’info est tout de même difficile à trouver.

  6. Alex dit :
    5 juin 2012

    Drôlement pratique !

    En effet pour les images, l’intérêt est assez limité pour l’utilisateur, en revanche pour tous les fichiers pdf/doc/html/txt etc… qui sont lus nativement par les navigateurs, c’est super pratique je trouve, ca remplace les scripts un peu lourdingue parfois.

  7. Jojaba dit :
    15 août 2012

    Ne fonctionne pas correctement sur Firefox 14.0.1 !!!
    J’ai eu affaire à cet attribut sur la page de téléchargement de Prism js : http://prismjs.com/download.html
    La boîte de téléchargement s’affiche effectivement mais les noms de fichier sont bizarres (4f5gd75.part)…
    D’ailleurs dans ton article, les liens de téléchargement ne fonctionnent pas non plus… ;)

  8. Jojaba dit :
    15 août 2012

    oupss !
    Voilà ce qui arrive lorsqu’on lit en diagonal, j’avais pas vu que tu indiquais que ça ne fonctionnais que sur Chrome.
    Désolé. :/

  9. Geoffrey dit :
    15 août 2012

    Hello,

    Pas de problème. Ça arrive ^^

    Je n’ai pas testé récemment l’attribut sur les nouvelles versions de navigateurs. Mais je pense que les autres (autres que Chrome) vont avoir quelques trains de retard, à moins que cet attribut ne soit complètement abandonné.

    Au plaisir de te lire.

  10. nonos dit :
    4 septembre 2012

    Utilisant jQuery, il existe aussi Plupload: http://www.plupload.com/example_all_runtimes.php

    Bonne journée !

  11. Geoffrey dit :
    4 septembre 2012

    Bonjour Nonos,

    Merci pour la ressource, cependant ici on parle bien de download et non d’upload. À moins qu’une chose ne m’échappe sur ce plugin, ça ne parle bien que d’upload.

    Bonne journée.

  12. nonos dit :
    4 septembre 2012

    Ah oui ^^’

    Si je dis que je voulais vérifier si vous suiviez, ça ne serait pas crédible …

    je ne sais pas, j’étais dans mon truc, tout à coup je pense à votre sujet, hop je poste,

    j’aurais du me réveiller avant.

    Toutes mes confuses,

    et à bientôt, parce que de toute façon je n’ai honte de rien.

  13. Geoffrey dit :
    4 septembre 2012

    Ah ah ^^
    Pas de problème, au contraire, ça semble être une bonne ressource.
    Merci d’avoir pensé à ce blog :)

  14. jmpp dit :
    23 octobre 2012

    C’est effectivement bon à savoir qu’il existe pareil attribut. Bon après c’est toujours le même problème avec les nouveautés : attendre leur implémentation finale.

    Je me posais la question de savoir en revanche si cela ne pourrait pas servir à des utilisateurs vicieux pour propager des virus. D’après toi ?

    <a href="http://web-site.tld/m-a-l-w-a-r-e.exe" rel="nofollow" download="photoviewer">Voir la photo</a>
  15. Geoffrey dit :
    23 octobre 2012

    Hello,

    Au fond pas plus qu’un lien classique :)
    Ils sont partout ! :O

  16. Ilycite dit :
    23 octobre 2012

    C’est une fonctionnalité qui me plait bien ! Je viens de tester avec la dernière version de firefox et opera au cas où ça aurait bougé de leur côté mais non, chrome reste le seul à la supporter.

    Le simple fait de pouvoir renommer suivant le spot de téléchargement je trouve ça super, comme ça on peut garder ses habitudes de nommage de fichiers sur son serveur et faire des jolis noms pour les visiteurs.

    Après pour la question de forcer la main du visiteur, certaines choses restent à mes yeux pertinentes à utiliser. Le target je l’utilise encore personnellement, un utilisateur lambda ne sait pas forcément ouvrir un nouvel onglet ou a parfois la flemme de passer par un raccourci clavier ou un clic droit pour le faire. Il quittera la page pour consulter un lien externe et sera gêné dans sa navigation puisqu’il devra passer par l’historique du navigateur pour retourner sur le site. Et si c’est un gros flemmard, il ne reviendra même pas !

  17. Geoffrey dit :
    24 octobre 2012

    C’est vrai que target est et sera toujours un sujet délicat et je comprends ta réflexion à ce sujet.

    Pour ma part je pars du principe que je ne peux pas forcer un utilisateur à faire ce qu’il ne veut pas. Si un utilisateur ne sait pas ouvrir un lien dans un nouvel onglet ou s’il a la flemme, tant pis pour lui, c’est que même avec un nouvel onglet il y aurait forte chance pour que fermer l’onglet courant l’embête tout autant.

    Puis c’est entrer dans un jeu de frustration pour ce type d’utilisateur: un coup ça ouvre dans un autre onglet, un coup non, ça va le conforter dans l’idée qu’il ne sait pas utiliser l’outil et ne le comprend pas.

    J’ai un peu de mal à exprimer l’idée que j’en ai, j’espère que tu auras compris mon charabia :p

  18. Ilycite dit :
    24 octobre 2012

    Ouaip, j’ai compris, mais si je ne m’abuse, tu utilises les target sur ce blog pour les liens des réseaux sociaux !

  19. Geoffrey dit :
    24 octobre 2012

    Oui c’est vrai.
    Erreur de jeunesse pas encore corrigée.
    D’ailleurs je viens de voir que c’était aussi le cas sur les liens partenaires et ressources.
    Ce sera corrigé :p

  20. Mélusine dit :
    11 décembre 2012

    Bonjour
    J’avais mis dans le htaccess comme vous indiqué ici : http://www.creativejuiz.fr/blog/tutoriels/forcer-telechargement-fichier-par-navigateur mais cela ne fonctionnais pas sur Chrome. Heureusement que cette astuce fonctionne !

    Merci pour cette astuce ^^

  21. Geoffrey dit :
    11 décembre 2012

    Bonjour,
    Il s’agissait de quel type de fichier ?
    Merci.

  22. Mélusine dit :
    11 décembre 2012

    Bonjour
    Il s’agit de .jpg
    Cdlt

Laisser un commentaire

Certains codes HTML ne sont pas échappés automatiquement. Pour afficher du code dans votre commentaire, merci d'échapper vos chevrons en utilisant "&lt;" et "&gt;" en lieu et place de "<"" et ">".

Il est difficile de proposer un support pour tous les articles de ce blog. En ne fournissant pas un moyen de consulter votre code bogué, vous vous assurez de ne pas avoir de réponse adaptée.

 
Le studio web