185 votes

HTML - Afficher l'image après avoir sélectionné le nom de fichier

J'ai un formulaire qui me permet de

naviguer et sélectionner un fichier.

Ce que je veux faire, c'est afficher cette image immédiatement après avoir sélectionné l'image. Et cela se fait avant que le bouton "envoyer" du formulaire ne soit pressé, donc l'image réside presque certainement côté client. Est-ce possible ?

0 votes

Affichage de l'aperçu de la sélection de plusieurs fichiers sans téléchargement et téléchargement différé anasthecoder.blogspot.in/2014/12/…

343voto

ygssoni Points 2519

Voici:

HTML

    JS Bin

      article,
      aside,
      figure,
      footer,
      header,
      hgroup,
      menu,
      nav,
      section {
        display: block;
      }

Script:

function readURL(input) {
  if (input.files && input.files[0]) {
    var reader = new FileReader();

    reader.onload = function (e) {
      $('#blah').attr('src', e.target.result).width(150).height(200);
    };

    reader.readAsDataURL(input.files[0]);
  }
}

Démonstration en direct

0 votes

Désolé pour le retard. J'ai revisité votre réponse et cela fonctionne parfaitement, mais pas dans IE, c'est ce que j'ai testé initialement. Merci beaucoup.

2 votes

Cela ne fonctionne pas sur IE! IE n'a pas de classe FileReader!

1 votes

Le travail de démonstration fonctionne pour moi mais sur mon site (local) non -> quelle peut être la raison pour laquelle la fonction (e) n'est pas appelée après avoir téléchargé une image?

37voto

Xavier Points 486

Vous pouvez y parvenir avec le code suivant :

$("input").change(function(e) {

    for (var i = 0; i < e.originalEvent.srcElement.files.length; i++) {

        var file = e.originalEvent.srcElement.files[i];

        var img = document.createElement("img");
        var reader = new FileReader();
        reader.onloadend = function() {
             img.src = reader.result;
        }
        reader.readAsDataURL(file);
        $("input").after(img);
    }
});

Demo: http://jsfiddle.net/ugPDx/

0 votes

Cela ne semble pas fonctionner. Lorsque je lance le site de test JSFIDDLE, je peux parcourir et choisir le nom du fichier mais rien n'est affiché. J'ai essayé cela dans IE et Opera. Qu'est-ce que je fais de travers ?

0 votes

Sur la page JFiddle et lors de la tentative de mise en œuvre sur ma propre page, je reçois l'erreur "e.originalEvent.srcElement est indéfini". Lorsque je vérifie e.originalEvent, il a seulement les propriétés : bubbles, cancelable, currentTarget, defaultPrevented, eventPhase, explicitOriginalTarget, isTrusted, originalTarget, target, timeStamp, type, et proto. Le nom du fichier téléchargé et quelques détails sont disponibles sous e.orginalEvent.originalTarget.files, mais je ne peux pas trouver la source de l'image.

0 votes

Puis-je obtenir le nom du fichier en utilisant reader.result dans la même boucle pour l'assigner aux identifiants d'img ? Votre aide serait appréciée.

5voto

Kelvin Mackay Points 2861

Ceci peut être fait en utilisant HTML5, mais cela ne fonctionnera que dans les navigateurs qui le prennent en charge. Voici un exemple.

Gardez à l'esprit que vous aurez besoin d'une méthode alternative pour les navigateurs qui ne prennent pas en charge cela. J'ai eu beaucoup de succès avec ce plugin, qui prend une grande partie du travail en charge.

1 votes

Télécharger les fichiers et les déplacer est facile. Mon problème est de les afficher dès qu'un fichier valide a été choisi. Je n'ai pas réussi à faire fonctionner aucune des suggestions données jusqu'à présent. En ce qui concerne HTML5, c'est parti, mais tant qu'il ne sera pas omniprésent, je dois écrire une solution qui fonctionne pour la majorité des navigateurs là-bas :-(

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X