Bonjour,
Quelqu'un pourrait-il me dire comment, en JSP, uploader un fichier depuis le poste du client et le stocker sur le serveur?
Merci
Bonjour,
Quelqu'un pourrait-il me dire comment, en JSP, uploader un fichier depuis le poste du client et le stocker sur le serveur?
Merci
Hello,
La question a été posée de multiple fois sur ce forum!
En faisant une recherche sur le forum developpement WEB en Java avec les mots clefs : upload file.
Tu devrais trouver une réponse!
Oui, en effet.
J'ai trouvé un bout de code que j'ai essayé d'adapter à ma situation mais j'ai toujours un souci.
Pourrais-tu m'aider à disgnostiquer le souci dans mon fichier Crea01.jsp dont le code est le suivant? (sachant que j'ai copié dans mon WEB-INF/lib toutes les librairie nécessaires notamment la commons-fileupload-1.1.1.jar)
Ainsi, lorsque je clique sur le bouton "valider", au lieu d'obtenir une copie (de la photo sélectionnée) dans le répertoire tmp , le programme passe toujours dans la partie :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 <%@page language="java" contentType="text/html; charset=iso-8859-1" import="java.sql.*,javax.servlet.http.*,java.lang.*,java.util.*"%> <%@ page import="org.apache.commons.fileupload.*" %> <%@ page import="org.apache.commons.fileupload.DiskFileUpload" %> <%@ page import="java.util.List" %> <%@ page import="java.io.*" %> <%@ page import="java.io.File" %> <%@ page import="java.util.Iterator" %> <% boolean isMultipart = FileUpload.isMultipartContent(request); if(!isMultipart){ request.setAttribute("msg", "Request was not multipart!"); request.getRequestDispatcher("msg.jsp").forward(request, response); return; } DiskFileUpload upload = new DiskFileUpload(); List items = upload.parseRequest(request); Iterator itr = items.iterator(); while(itr.hasNext()){ FileItem item = (FileItem) itr.next(); if(item.isFormField()) { String fieldName = item.getFieldName(); if(fieldName.equals("name")) request.setAttribute("msg", "Thank You: " + item.getString()); } else { File fullFile = new File(item.getName()); File savedFile = new File(getServletContext().getRealPath("/")+"/tmp/", fullFile.getName()); item.write(savedFile); } } %> <html> <head><title>Test upload Fichier</title></head> <body> <form name="myForm" action="Crea01.jsp" method="post" enctype="multipart/form-data"> Nom <input type="text" name="mom"/><br/> Photo <input type="file" name="photo"/> <input type="submit" value="valider"> </form> </body> </html>
if(!isMultipart){
request.setAttribute("msg", "Request was not multipart!");
request.getRequestDispatcher("msg.jsp").forward(request, response);
return;
}
Merci d'avance
Hello,
Je pense que le code :
Devrait se trouver dans la servlet qui receptionnera la validation de ton formulaire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 boolean isMultipart = FileUpload.isMultipartContent(request); if(!isMultipart){ request.setAttribute("msg", "Request was not multipart!"); request.getRequestDispatcher("msg.jsp").forward(request, response); return; } DiskFileUpload upload = new DiskFileUpload(); List items = upload.parseRequest(request); Iterator itr = items.iterator(); while(itr.hasNext()){ FileItem item = (FileItem) itr.next(); if(item.isFormField()) { String fieldName = item.getFieldName(); if(fieldName.equals("name")) request.setAttribute("msg", "Thank You: " + item.getString()); } else { File fullFile = new File(item.getName()); File savedFile = new File(getServletContext().getRealPath("/")+"/tmp/", fullFile.getName()); item.write(savedFile); } } %>
N'oublie pas que le code est executé coté serveur!![]()
Justement, et comment dois-je faire pour obtenir que ce code se trouve dans la servlet qui receptionnera la validation de mon formulaire?
Que dois-je mettre dans ma page Crea01.jsp?
Merci
Hello,
Il faut que le bout de code soit dans la méthode do*** (post ou get) de la servlet déclarée dans l'attribut action de ton formulaire.
Bonjour,
Je n'arrive pas à comprendre quand tu parles de méthode doPost ou doGet de la servlet déclarée dans action. En effet dans le "action", j'ai le même fichier "Crea01.jsp" (le submit doit me renvoyer vers la même page). Et puis, je ne sais pas comment je peux définir une méthode dans un fichier .jsp
Merci
Hello,
voila un petit schema qui devrait t'aider à comprendre :
crea01.jsp ----> servlet permettant de faire les traitements ---> crea01.jsp.
La première flêche represente le submit de ton formulaire, la deuxième représente la redirection apres traitement des données envoyées par ton formulaire.
Je pense qu'avant d'aller plus loin, tu devrais (re)lire les principes liés aux servlets et au jsp. Bien faire la différence entre les deux et bien comprendre leur champ d'application.
Re salut et excuse-moi vraiment pour le dérangement récurrent...
Je suis tout à fait d'accord avec toi par rapport au schéma :
crea01.jsp ----> servlet permettant de faire les traitements ---> crea01.jsp
Par contre quand tu me dis que le code
doit se trouver dans la méthode doPost de ma servlet, je me demande comment écrire un code dans cette servlet!!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 boolean isMultipart = FileUpload.isMultipartContent(request); if(!isMultipart){ request.setAttribute("msg", "Request was not multipart!"); request.getRequestDispatcher("msg.jsp").forward(request, response); return; } DiskFileUpload upload = new DiskFileUpload(); List items = upload.parseRequest(request); Iterator itr = items.iterator(); while(itr.hasNext()){ FileItem item = (FileItem) itr.next(); if(item.isFormField()) { String fieldName = item.getFieldName(); if(fieldName.equals("name")) request.setAttribute("msg", "Thank You: " + item.getString()); } else { File fullFile = new File(item.getName()); File savedFile = new File(getServletContext().getRealPath("/")+"/tmp/", fullFile.getName()); item.write(savedFile); } } %>
D'après ma compréhension des jsp/servlet, le principe est que les pages .jsp sont compilées en des servlets côté serveur, lesquelles servlets renvoient du code HTML à afficher par le navigateur du client.
N'est-ce pas?
Merci
Hello,
Je suis d'accord une fois compilé une JSP est traduit en servlet.
Mais il ne faut pas voir les choses de cette manière là.
Dans l'implémentation d'une application n tier. Il faut raisonner selon le modele MVC (Model View Controler).
Les JSPs étant dédiées à la partie vue et les servlets à la partie controler.
La partie vue correspond à l'affiche (evidement) : la mise en forme des données pour la présentation au l'utilisateur.
La partie controleur permet de traiter les données renvoyées par la vue et en fonction de cela d'appeler les services nécessaire à la réalisation de la demande utilisateur. une fois ces traitements effectuer le controleur renvoie le resultat à la partie vue qui se chargera de faire la mise en forme.
J'espere que tu comprendras mieux le différence maintenant.
Dans mon explication ci dessus j'ai pris quelques raccourcis. Je te recommande d'approfondir le sujet.
Après ce bref rappel : le code Java fait partie du controleur (donc de la servlet) il recupere ce qui est envoyé par ta jsp .
L'implémentation que tu as fait dans ta JSP ne pourra jamais fonctionner.
J'espere que cela t'aidera, si tu as des questions n'hesite pas!![]()
Partager