Comment sélectionner plusieurs fichiers avec <input type="file">
?
Nouvelle réponse:
En HTML5, vous pouvez ajouter l'attribut multiple
pour sélectionner plus d'un fichier.
<input type="file" name="filefield" multiple="multiple">
Ancienne réponse:
Vous ne pouvez sélectionner qu'un fichier par
<input type="file" />
. Si vous souhaitez envoyer plusieurs fichiers, vous devrez utiliser plusieurs balises d'entrée ou utiliser Flash ou Silverlight.
Il y a aussi HTML5 <input type="file" multiple />
_ ( spécification ).
La prise en charge du navigateur est assez bonne sur le bureau (mais pas prise en charge par IE 9 et versions antérieures), moins bonne sur le mobile, je suppose qu’il est plus difficile à implémenter correctement en fonction de la plate-forme et de la version.
Le tout devrait ressembler à ceci:
<form enctype='multipart/form-data' method='POST' action='submitFormTo.php'>
<input type='file' name='files[]' multiple />
<button type='submit'>Submit</button>
</form>
Assurez-vous d'avoir le enctype='multipart/form-data'
_ attribut dans votre <form>
, ou vous ne pouvez pas lire les fichiers côté serveur après la soumission!
Ce plugin jQuery ( démo jQuery File Upload ) le fait sans flash, sous la forme qu'il utilise:
<input type='file' name='files[]' multiple />
Vous pouvez le faire maintenant avec HTML5
En substance, vous utilisez l'attribut multiple sur l'entrée de fichier.
<input type='file' multiple>
HTML5 a fourni un nouvel attribut multiple pour l'élément d'entrée dont l'attribut type est fichier. Vous pouvez donc sélectionner plusieurs fichiers et IE9 et les versions précédentes ne le prennent pas en charge.
NOTE: soyez prudent avec le nom de l'élément en entrée. lorsque vous souhaitez télécharger plusieurs fichiers, vous devez utiliser array et non string comme valeur de l'attribut name.
ex: input type = "fichier" name = "myPhotos []" multiple = "multiple"
et si vous utilisez php, vous obtiendrez les données dans $ _FILES et utiliserez var_dump ($ _ FILES). Vous verrez le résultat et le traitement. Vous pouvez maintenant effectuer une itération et faire le reste.
<form action="" method="post" enctype="multipart/form-data">
<input type="file" multiple name="img[]"/>
<input type="submit">
</form>
<?php
print_r($_FILES['img']['name']);
?>
C'est facile ...
<input type='file' multiple>
$('#file').on('change',function(){
_readFileDataUrl(this,function(err,files){
if(err){return}
console.log(files)//contains base64 encoded string array holding the
image data
});
});
var _readFileDataUrl=function(input,callback){
var len=input.files.length,_files=[],res=[];
var readFile=function(filePos){
if(!filePos){
callback(false,res);
}else{
var reader=new FileReader();
reader.onload=function(e){
res.Push(e.target.result);
readFile(_files.shift());
};
reader.readAsDataURL(filePos);
}
};
for(var x=0;x<len;x++){
_files.Push(input.files[x]);
}
readFile(_files.shift());
};