JS uniquement - pas besoin de jquery
Il suffit de créer un élément de saisie et de déclencher le clic.
var input = document.createElement('input');
input.type = 'file';
input.click();
C'est le plus basique, pop un dialogue de sélection de fichier, mais il ne sert à rien sans traiter le fichier sélectionné...
Traitement des dossiers
Ajout d'un onchange
à l'entrée nouvellement créée nous permettrait d'agir une fois que l'utilisateur a sélectionné le fichier.
var input = document.createElement('input');
input.type = 'file';
input.onchange = e => {
var file = e.target.files[0];
}
input.click();
Pour l'instant, nous avons le fichier variable stockant diverses informations :
file.name // the file's name including extension
file.size // the size in bytes
file.type // file type ex. 'application/pdf'
Super !
Mais, que faire si nous avons besoin du contenu du fichier ?
Afin d'accéder au contenu réel du fichier, pour diverses raisons (placer une image, charger dans un canevas, créer une fenêtre avec une url de données en base64, etc. FileReader
API
Nous devons créer une instance du FileReader et y charger la référence du fichier sélectionné par l'utilisateur.
var input = document.createElement('input');
input.type = 'file';
input.onchange = e => {
// getting a hold of the file reference
var file = e.target.files[0];
// setting up the reader
var reader = new FileReader();
reader.readAsText(file,'UTF-8');
// here we tell the reader what to do when it's done reading...
reader.onload = readerEvent => {
var content = readerEvent.target.result; // this is the content!
console.log( content );
}
}
input.click();
Essayez de coller le code ci-dessus dans la fenêtre de console de votre devtool, il devrait produire un dialogue select-a-file, après avoir sélectionné le fichier, la console devrait maintenant imprimer le contenu du fichier.
Exemple - "La nouvelle image de fond de Stackoverflow !"
Essayons de créer un dialogue de sélection de fichier pour changer l'image de fond de stackoverflows en quelque chose de plus piquant...
var input = document.createElement('input');
input.type = 'file';
input.onchange = e => {
// getting a hold of the file reference
var file = e.target.files[0];
// setting up the reader
var reader = new FileReader();
reader.readAsDataURL(file); // this is reading as data url
// here we tell the reader what to do when it's done reading...
reader.onload = readerEvent => {
var content = readerEvent.target.result; // this is the content!
document.querySelector('#content').style.backgroundImage = 'url('+ content +')';
}
}
input.click();
ouvrez devtools, et collez le code ci-dessus dans la fenêtre de la console, cela devrait faire apparaître une boîte de dialogue "select-a-file", lors de la sélection d'une image, le fond de la boîte de contenu de stackoverflows devrait changer pour l'image sélectionnée.
A la vôtre !