HTML & JS – afficher une image miniature suite à l’utilisation d’un input type=’file’

Introduction

Voici un script html – js permettant d’afficher une miniature si un internaute upload un fichier image via un <input type="file">
Ce script utilise l’objet javascript FileReader, qui permet de lire les fichiers stockés dans un navigateur suite à un upload, plus d’info sur cet objet dans le MDN

Afficher une miniature dans un formulaire avec input type=’file’

Fichier index.html

 <!DOCTYPE html>
<html lang="fr">
<head>
 <meta charset="UTF-8">
 <title>Document</title>
 <style>
   #preview{
     width: 200px;
     display: inline-block;
   }
   #preview img{
     width: 100%;
   }
 </style>
</head>
<body>
   <form action="my-script.php" enctype="multipart/form-data" method="post">
     <div><input type="file" onchange="handleFiles(files)" id="upload" multiple name="file"></div>
     <div><label for="upload"><span id="preview"></span></label></div>
     <div><input type="submit" value="Envoyer"></div>
   </form>
 <script>
 function handleFiles(files) {
   var imageType = /^image\//;
   for (var i = 0; i < files.length; i++) {
   var file = files[i];
   if (!imageType.test(file.type)) {
     alert("veuillez sélectionner une image");
   }else{
     if(i == 0){
       preview.innerHTML = '';
     }
     var img = document.createElement("img");
     img.classList.add("obj");
     img.file = file;
     preview.appendChild(img); 
     var reader = new FileReader();
     reader.onload = ( function(aImg) { 
     return function(e) { 
     aImg.src = e.target.result; 
   }; 
  })(img);

 reader.readAsDataURL(file);
 }
 
 }
}
 </script>
</body>
</html>