Dans mon formulaire HTML, j'ai saisi une entrée avec un fichier type, par exemple:
<input type="file" multiple>
Ensuite, je sélectionne plusieurs fichiers en cliquant sur ce bouton de saisie. Maintenant, je veux afficher un aperçu des images sélectionnées avant de soumettre le formulaire. Comment faire cela en HTML 5?
HTML5 est livré avec File API spec , qui vous permet de créer des applications permettant à l'utilisateur d'interagir localement avec les fichiers; Cela signifie que vous pouvez charger des fichiers et les afficher dans le navigateur sans avoir à les télécharger. Une partie de l'API de fichier est l'interface FileReader qui permet aux applications Web de lire de manière asynchrone le contenu des fichiers.
Voici un exemple rapide qui utilise la classe FileReader
pour lire une image en tant que DataURL et restitue une vignette en définissant l'attribut src
d'une balise d'image sur une URL de données:
Le code html:
<input type="file" id="files" />
<img id="image" />
Le code JavaScript:
document.getElementById("files").onchange = function () {
var reader = new FileReader();
reader.onload = function (e) {
// get loaded data and render thumbnail.
document.getElementById("image").src = e.target.result;
};
// read the image file as a data URL.
reader.readAsDataURL(this.files[0]);
};
Voici un bon article sur en utilisant les API de fichiers en JavaScript .
L'extrait de code dans l'exemple HTML ci-dessous filtre les images de la sélection de l'utilisateur et convertit les fichiers sélectionnés en plusieurs aperçus de vignettes:
function handleFileSelect(evt) {
var files = evt.target.files;
// Loop through the FileList and render image files as thumbnails.
for (var i = 0, f; f = files[i]; i++) {
// Only process image files.
if (!f.type.match('image.*')) {
continue;
}
var reader = new FileReader();
// Closure to capture the file information.
reader.onload = (function(theFile) {
return function(e) {
// Render thumbnail.
var span = document.createElement('span');
span.innerHTML =
[
'<img style="height: 75px; border: 1px solid #000; margin: 5px" src="',
e.target.result,
'" title="', escape(theFile.name),
'"/>'
].join('');
document.getElementById('list').insertBefore(span, null);
};
})(f);
// Read in the image file as a data URL.
reader.readAsDataURL(f);
}
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
<input type="file" id="files" multiple />
<output id="list"></output>
Ici, je l’ai fait avec jQuery en utilisant l’API FileReader.
Balisage HTML:
<input id="fileUpload" type="file" multiple />
<div id="image-holder"></div>
jQuery:
Ici, dans le code jQuery, je vérifie d'abord l'extension du fichier. ie un fichier image valide à traiter, puis vérifie si le navigateur prend en charge FileReader L'API est oui alors seulement traité sinon afficher le message respecté
$("#fileUpload").on('change', function () {
//Get count of selected files
var countFiles = $(this)[0].files.length;
var imgPath = $(this)[0].value;
var extn = imgPath.substring(imgPath.lastIndexOf('.') + 1).toLowerCase();
var image_holder = $("#image-holder");
image_holder.empty();
if (extn == "gif" || extn == "png" || extn == "jpg" || extn == "jpeg") {
if (typeof (FileReader) != "undefined") {
//loop for each file selected for uploaded.
for (var i = 0; i < countFiles; i++) {
var reader = new FileReader();
reader.onload = function (e) {
$("<img />", {
"src": e.target.result,
"class": "thumb-image"
}).appendTo(image_holder);
}
image_holder.show();
reader.readAsDataURL($(this)[0].files[i]);
}
} else {
alert("This browser does not support FileReader.");
}
} else {
alert("Pls select only images");
}
});
function handleFileSelect(evt) {
var files = evt.target.files;
// Loop through the FileList and render image files as thumbnails.
for (var i = 0, f; f = files[i]; i++) {
// Only process image files.
if (!f.type.match('image.*')) {
continue;
}
var reader = new FileReader();
// Closure to capture the file information.
reader.onload = (function(theFile) {
return function(e) {
// Render thumbnail.
var span = document.createElement('span');
span.innerHTML =
[
'<img style="height: 75px; border: 1px solid #000; margin: 5px" src="',
e.target.result,
'" title="', escape(theFile.name),
'"/>'
].join('');
document.getElementById('list').insertBefore(span, null);
};
})(f);
// Read in the image file as a data URL.
reader.readAsDataURL(f);
}
}
document.getElementById('files').addEventListener('change', handleFileSelect, false);
<input type="file" id="files" multiple />
<output id="list"></output>
Pour les images d’arrière-plan, veillez à utiliser url()
node.backgroundImage = 'url(' + e.target.result + ')';