IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Publications (X)HTML et CSS Discussion :

Forcer le chargement d'un fichier en HTML5


Sujet :

Publications (X)HTML et CSS

  1. #1
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut Forcer le chargement d'un fichier en HTML5
    Lorsque vous proposez une ressource aux visiteurs de votre site (images, documents PDF ou autres, etc.), les navigateurs vont essayer de les afficher via des fonctionnalités intégrées ou des extensions/plugins.
    Or, si vous souhaitez juste proposer ces ressources au téléchargement, vous serez obligé de "forcer la main" au navigateur côté serveur :

    En gros, la technique consiste à associer au fichier souhaité un en-tête HTTP Content-Disposition qui indiquera que celui-ci doit être téléchargé et non affiché.

    Bien entendu, si votre page est uniquement en (X)HTML, vous êtes de la revue ! La seule technique possible est de transformer votre fichier dans un format qui ne peut être affiché par le navigateur (la technique la plus classique étant de le compresser en archive zip).

    Mais cela, c'était avant.
    Car désormais, HTML5 vous permet de rendre vos fichiers téléchargeables, quel que soit leur format, de façon très simple.

    Il suffit d'utiliser l'attribut download.

    Comment s'utilise cet attribut ?
    Le plus simplement du monde : en l'intégrant à la balise <a> ou <area> !

    Quelle valeur donner à cet attribut ?
    Celle que vous souhaitez.
    Plus exactement, la valeur va correspondre au nom de fichier présélectionné dans la fenêtre de téléchargement, mais si vous ne précisez pas de valeur (download) ou si vous mettez une valeur vide (download=""), alors le nom de fichier par défaut sera celui du fichier original.
    Exemples :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a href="foo.png" download>Enregistrer</a>
    <a href="foo.png" download="">Enregistrer</a>
    <a href="foo.png" download="bar.png">Enregistrer</a>

    Quels types de fichiers peuvent être téléchargés ?
    Il n'y a pas de restriction sur les types de fichiers que vous pouvez proposer en téléchargement, néanmoins, ils devront respecter la Same Origin Policy (même domaine, même TLD, même sous domaine, même protocole, même port).
    Notez aussi que vous pouvez proposer en téléchargement des fichiers encodés en base64, donc en particulier des fichiers générés depuis le navigateur.

    Mais alors, mes codes serveur peuvent être téléchargés ?
    Bien sûr que non, heureusement !
    Si vous demandez un fichier .php par exemple sur le serveur, celui-ci sera d'abord interprété avant d'être envoyé. Ce sera donc le fichier généré qui sera récupéré et non le fichier contenant le code source.
    Il est donc en revanche possible de proposer de télécharger des fichiers images (par exemples) générés dynamiquement sur le serveur.

    Quel est le support des navigateur ?
    C'est le bémol concernant cet attribut...
    À l'heure actuelle, seuls Firefox, Chrome et Opera (en version desktop ou mobile) reconnaissent cet attribut, pour les autres navigateurs, vous devrez passer par une solution de contournement.

    Comment savoir si un navigateur prend en charge download ?
    Il est possible, avec JavaScript, de détecter si la fonctionnalité est supportée, pour cela, on crée un nouvel élément <a> et on vérifie s'il possède une propriété download :
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var testA = document.createElement('a');
    if('download' in testA){
        // Le navigateur supporte l'attribut download
    }
    else{
        // Le navigateur ne supporte pas l'attribut download
    }

    Voir une page d'exemple.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  2. #2
    Membre régulier
    Avatar de madvic
    Homme Profil pro
    Inscrit en
    Mai 2003
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations forums :
    Inscription : Mai 2003
    Messages : 101
    Points : 92
    Points
    92
    Par défaut Le passé nous rattrappe toujours
    Oui mais comme toujours, il faut faire avec les anciens navigateurs...
    Donc pas vraiment du HTML5...

Discussions similaires

  1. [HTML 5] Forcer le chargement d'un fichier en HTML5
    Par Bovino dans le forum Balisage (X)HTML et validation W3C
    Réponses: 0
    Dernier message: 31/10/2013, 16h07
  2. Réponses: 4
    Dernier message: 13/06/2007, 15h27
  3. [Debutant][D7]Pb au chargement d'un fichier *.3ds
    Par [Silk] dans le forum OpenGL
    Réponses: 1
    Dernier message: 26/06/2005, 11h10
  4. [SAX] Chargement d'un fichier de paramétrage
    Par doublep dans le forum Format d'échange (XML, JSON...)
    Réponses: 6
    Dernier message: 05/12/2004, 20h42
  5. chargement d'un fichier externe en base de données
    Par samsbike dans le forum Administration
    Réponses: 3
    Dernier message: 24/08/2004, 17h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo