Je sais qu'il y a beaucoup de sujets expliquant le téléchargement de fichiers via javascript. Mais mon problème est autre chose.

J'ai mon téléchargement de fichier avec JS ordinaire, ce qui fonctionne bien, mais mon problème est que je ne veux pas que les fichiers soient téléchargés directement après les avoir choisis dans le formulaire. Parce que le formulaire a un autre champ de saisie et je veux tout télécharger sur le serveur après avoir cliqué sur le bouton Enregistrer via ajax. Je ne veux pas non plus rafraîchir la page donc tout devrait passer par ajax.

Pour faire court: il y a 3 champs de saisie (texte), un champ de saisie (fichier) et un bouton Enregistrer dans mon formulaire. Après avoir cliqué sur le bouton Enregistrer, le formulaire appelle une fonction JS et celle-ci doit gérer les données (textes et fichiers) et les envoyer via ajax au serveur.

J'espère que je pourrais expliquer le problème.

<form>
<input type="text" name="field1">
<input type="text" name="field2">
<input type="text" name="field3">
<input type="file" name="file" multiple id="myFile" onchange="uploadPicture()">
</form>

Et le JS

function uploadPicture() {
var formData = new FormData();
for (var i = 0; i < document.getElementById('myFile').files.length[i]) {
formData.append('files[]', file);
....
and in here I send the formData via ajax to my server, which works fine.

Maintenant, mon problème n'est pas d'envoyer les données directement au serveur, mais de les enregistrer temporairement, puis après avoir appuyé sur le bouton Enregistrer, tout envoyer au serveur ...

Je me demande s'il existe un moyen (astuce) de sauvegarder les fichiers entre le téléchargement et l'envoi.

J'espère que c'est plus clair maintenant.

Merci

0
litux 4 nov. 2019 à 20:44

1 réponse

Meilleure réponse

Déplacez la déclaration de votre variable formData dans la portée externe, ajoutez uniquement les fichiers dans uploadPicture puis utilisez formData dans le gestionnaire de clics de votre bouton d'enregistrement.

J'espère que ça aide.

1
Andre Nuechter 4 nov. 2019 à 18:02