JS: Comment envoyer plusieurs fichiers à l'aide de FormData (jQuery Ajax)

Dans ma forme, plusieurs fichiers sont disponibles, à l'aide de FormData un seul fichier est téléchargé, même si je sélectionne plus d'un fichier à télécharger, voici le code

HTML

 <form name="uploadImages" method="post" enctype="multipart/form-data"> <input type="file" name="photo[]" value=""> <input type="file" name="photo[]" value=""> <input type="file" name="photo[]" value=""> </form> 

JS

  var ajaxData = new FormData(); ajaxData.append( 'action','uploadImages'); jQuery.each($("input[name^='photo']")[0].files, function(i, file) { ajaxData.append('photo['+i+']', file); }); $.ajax({ url: URL, data: ajaxData, cache: false, contentType: false, processData: false, type: 'POST', dataType:'json', success: function(data) { if (data.status == 'success') { location.reload(); } } }); 

J'utilise PHP au serveur, en utilisant le HTML attribute name i, e photo seulement je peux enregistrer des fichiers, les noms de fichiers dynamiques ne fonctionneront pas pour moi.

Vous avez une erreur dans javascript: vous n'êtes plus sur les fichiers en une seule entrée, regardez ceci

 var ajaxData = new FormData(); ajaxData.append( 'action','uploadImages'); $.each($("input[type=file]"), function(i, obj) { $.each(obj.files,function(j, file){ ajaxData.append('photo['+j+']', file); }) }); 

Exemple sur jsfiddle

Ces réponses ne fonctionnent pas.

 var ajaxData = new FormData(); ajaxData.append( 'action','uploadImages'); $.each($("input[type=file]"), function(i, obj) { $.each(obj.files,function(j,file){ ajaxData.append('photo['+j+']', file);//i had to change "i" by "j" }) });