Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2089 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  Upload AJAX + JSP avec iframe et apache.commons.fileupload

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Upload AJAX + JSP avec iframe et apache.commons.fileupload

n°1923458
atomheartd​ude
I've always been mad, I know I
Posté le 11-09-2009 à 20:45:57  profilanswer
 

Bonsoir à tous,
 
Comme indiqué dans le sujet, je cherche à uploader un fichier client par Ajax avec l'API d'Apache.
Je débute à peine avec Ajax, mais ai lu sur différents sites que normalement Ajax ne permet pas l'envoi de fichier.
J'ai lu toutefois qu'il était possible de feinter en utilisant une iframe ( ça m'échappe pour le moment ).
J'essaie donc cette technique, mais sans résultat pour le moment :(
 
Voici donc mon code actuel :
 - côte HTML :

Code :
  1. <FORM method="POST" name="ATTACHFORM" enctype="multipart/form-data; boundary=--_01C922E9.D3E367F0" target="myFrame" >
  2. <div id="NEW_FIC" style="display:'<%=displayNewFic%>';">
  3.         <input size="1" id="newpj" name="newpj" onchange="submitDoc();" type="file"/>
  4. </div>
  5. </FORM>
  6. <iframe id="myFrame" name="myFrame"></iframe>

 
 - côté js :
 

Code :
  1. function submitDoc()
  2.         {
  3.                 http.open("POST", url , true);
  4.                 http.onreadystatechange = handleHttpResponse;
  5.                 http.setRequestHeader("Content-Type", "multipart/form-data; boundary=--_01C922E9.D3E367F0" );
  6.                 data = "noAD=test";
  7.                 http.send(data);
  8. }


 - côté JSP :

Code :
  1. boolean isMultipart = ServletFileUpload.isMultipartContent(request);
  2. FileItemFactory factory = new DiskFileItemFactory();
  3. ServletFileUpload upload = new ServletFileUpload(factory);
  4. List items = upload.parseRequest(request);
  5. Iterator iter = items.iterator();
  6. while (iter.hasNext()) {
  7.     FileItem item = (FileItem) iter.next();
  8.     if (item.isFormField()) {
  9. ...    } else {
  10.     File uploadedFile = new File(...);
  11.     }
  12. }

       
 
Mon problème est donc que items est toujours de taille = 0.
Je ne sais pas si cela vient du boundary que je ne précise pas dans la récupération ( si oui comment faire ? ) ou alors si il y a qqchose à faire avec l'iframe en javascript...  
Merci à l'avance pour toute aide, je sèche complètement et ne veux me résilier à faire des allers-retours serveur...


---------------
The only survivor of the national peoples gang
mood
Publicité
Posté le 11-09-2009 à 20:45:57  profilanswer
 

n°1923675
cbeyls
Hail to the King, Baby
Posté le 13-09-2009 à 00:49:01  profilanswer
 

Pas la peine de te casser la tête à simuler l'envoi d'un formulaire multipart/form-data en Ajax: tu l'as dit toi-même, XMLHttpRequest ne permet pas d'envoyer des fichiers. Dans la fonction submitDoc(), tu dois juste commander la soumission du formulaire. Donne-lui un id et spécifie comme action l'URL de ta JSP qui réceptionne les fichiers:
 

Code :
  1. <form id="attachform" name="attachform" method="post" action="/upload.jsp" enctype="multipart/form-data" target="myFrame">


 
Ensuite dans la fonction submitDoc:
 

Code :
  1. function submitDoc()
  2. {
  3.   document.getElementById("attachform" ).submit();
  4. }


 
Et boum, la JSP reçoit le fichier.

n°1923681
atomheartd​ude
I've always been mad, I know I
Posté le 13-09-2009 à 09:05:21  profilanswer
 

Merci beaucoup pour ta réponse.
En fait mon upload se fait lui meme dans une popup, donc ta solution voudrait dire, envoyer le fichier au contoleur, qui renverrait à ma page "mère" et qui ouvrirait la popup avec tous les paramètres ad hoc. Je veux a tout prix éviter cela justement.
Or, j'ai lu une astuce sur un upload avec iframe + ajax, par exemple ici
Mais quelque chose doit m'échapper, d'où ma demande d'aide...
Autre exemple : ici.


---------------
The only survivor of the national peoples gang
n°1923732
cbeyls
Hail to the King, Baby
Posté le 13-09-2009 à 18:34:31  profilanswer
 

Et bien c'est ce que tu fais, tu places une iframe dans ta page et dans ton formulaire tu as le paramètre:
 

Code :
  1. target="myFrame"


 
donc c'est l'iframe qui reçoit la page en retour, ni vu ni connu.

n°1923738
atomheartd​ude
I've always been mad, I know I
Posté le 13-09-2009 à 19:26:23  profilanswer
 

Ok donc en fait les titres des sites que j'ai lus portaient à confusion car il n'y a pas du d'Ajax en fait, c'est ça ?


---------------
The only survivor of the national peoples gang
n°1923757
atomheartd​ude
I've always been mad, I know I
Posté le 13-09-2009 à 21:33:45  profilanswer
 

Comment comprends tu l'exemple présent ici  ?
A quoi sert Ajax dans ce cas là selon toi ?


---------------
The only survivor of the national peoples gang
n°1923806
cbeyls
Hail to the King, Baby
Posté le 14-09-2009 à 05:23:37  profilanswer
 

Dans l'exemple que tu me montres, Ajax est utilisé pour faire des requêtes GET répétées sur le serveur pendant l'upload, afin d'afficher à l'utilisateur la progression de l'upload. C'est aussi une façon de détecter quand l'upload est terminé afin de mettre à jour l'interface graphique de l'utilisateur. Mais l'upload proprement dit n'est pas fait en Ajax mais via un simple formulaire envoyé via POST à la même servlet (dans la servlet, la méthode doPost gère l'upload tandis que la méthode doGet renvoie le statut de l'upload sous la forme de données XML à la requête Ajax GET).
 
Si tu n'as pas besoin d'afficher la progression de l'upload, tu n'as pas besoin d'ajax et tu peux détecter la fin de l'upload en programmant ta servlet/JSP afin qu'à la fin de l'upload elle renvoie une page web avec un javascript, page web qui sera donc chargée dans l'iframe cachée et le javascript de cette page doit appeler une fonction dans la page parent (celle qui contient l'iframe) afin de notifier la fin de l'upload. Il peut aussi s'agir d'une fonction affichant un message d'erreur en cas d'erreur d'upload détectée par la servlet/JSP.

n°1923819
atomheartd​ude
I've always been mad, I know I
Posté le 14-09-2009 à 09:36:47  profilanswer
 

Très bien, c'est très clair.
Merci infiniment pour tes réponses!


---------------
The only survivor of the national peoples gang

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  Upload AJAX + JSP avec iframe et apache.commons.fileupload

 

Sujets relatifs
Upload > 10 Go via HTTP ?Probleme d'upload fichiers div ajax(c urgent)
iframe+js code ok mais modif possible ?upload fichier et serveur linux
AJAX et effet sur image style ThickboxJavascript/Ajax vers un autre domaine
Espace entre menu et iframeAJAX : problème de compatibilité IE / Firefox
Appel AJAX qui s'effectue trop de fois (event JS) 
Plus de sujets relatifs à : Upload AJAX + JSP avec iframe et apache.commons.fileupload


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR