2009-10-17 4 views

Répondre

1

Apparemment, ce n'est pas aussi trivial que l'on pourrait penser, puisque vous ne pouvez pas simplement prendre le corps d'un formulaire, contenant une balise <input type='file'/>, et soumettre cela.

Mais vous pouvez soumettre le formulaire avec une cible d'un autre <iframe/>, puis interroger le serveur avec un objet XMLHttpRequest pour les mises à jour de statut, qui nécessite toutefois que votre script serveur, qui gère le téléchargement, le fasse dans un environnement asynchrone manière, sinon vous obtiendrez seulement une mise à jour de statut une fois que le fichier a été entièrement téléchargé, pas le genre de mises à jour de statut de progrès que vous voulez. Je pense que c'est un défi pour la plupart des frameworks web à ce jour, mais je n'ai jamais vraiment eu de raison de m'y intéresser. Cela semble amusant si ...

Si vous voulez simplement soumettre le fichier, indépendamment du formulaire actuel, vous ferez la même chose, mais vous n'avez pas à vous soucier des mises à jour de l'état d'avancement.

Ce que vous pouvez faire, est de remplacer le <input type='file'/> une fois le téléchargement terminé, avec un <input type='hidden'/> contenant l'ID côté serveur du fichier téléchargé récemment. De cette façon, vous saurez quand l'utilisateur enregistre, quels fichiers vous voulez sauvegarder.

Cette chose cachée peut également être une case à cocher, qui vous permettrait d'annuler un téléchargement de fichier, en décochant simplement cette case avant de cliquer sur Enregistrer.

1

Les téléchargements de fichiers utilisant l'objet XMLHttpRequest ne sont pas possibles dans tous les navigateurs (seuls Firefox et Safari/Chrome le prennent en charge), donc pour une implémentation multi-navigateur, utilisez l'astuce .

Si vous voulez un vrai téléchargement de fichier XHR, j'ai écrit un extended article sur la façon de le faire dans Firefox 3. Il est si bas niveau que vous devez réellement construire la requête HTTP réelle à partir de chaînes JavaScript.

Questions connexes