J'utilise Apache-commons-fileupload
pour obtenir le fichier de client
à la server
. (En utilisant JSP
et Servlet
).
JSP/HTML
<form method="POST" action="GetFile" enctype="multipart/form-data">
<input type="file" name="datafile">
<input type="text" name="text1">
<input type="submit" value="Next">
</form>
Servlet: GetFile
System.out.println(request.getParameter("text1"));
Je peux télécharger le fichier sur le serveur, mais je ne parviens pas à obtenir la valeur text1
dans la variable servlet
(la valeur null
de text1
dans la variable servlet
), j'ai besoin de cette variable textfield
dans le formulaire. en le téléchargeant dans la server
.
enctype="multipart/form-data"
du formulaire n'autorise-t-elle pas la soumission d'autres données de formulaire ? si elle ne le permet pas, quelles sont les autres options possibles pour envoyer cette textfield
supplémentaire à la server
.L'option
enctype="multipart/form-data"
du formulaire n'autorise-t-elle pas les autres les données de formulaire à soumettre? si cela ne le permet pas, quels sont les autres options, je dois envoyer ce champ de texte supplémentaire au serveur.
Non, l'utilisation de enctype="multipart/form-data"
ne pose aucun problème. Vous pouvez obtenir d’autres champs puis les classer sous cette forme.
Ou y a-t-il un autre problème dans mon code?
Oui, pour l'instant. Lorsque vous utilisez enctype="multipart/form-data"
, vous ne pouvez pas obtenir directement les paramètres en utilisant request.getParameter(name);
. Lors de son utilisation, les champs de formulaire ne sont pas disponibles en tant que paramètre de la requête, ils sont inclus dans le flux, vous ne pouvez donc pas l'obtenir normalement. Vous pouvez trouver un moyen de le faire dans la documentation de commons-fileupload , dans la section Traitement des éléments téléchargés.
Les paramètres ne sont pas perdus, c’est juste qu’ils font partie de la requête Stream.
Vous devez obtenir tous les éléments de la demande, les itérer et les gérer en conséquence en fonction de leur type
List items = upload.parseRequest(request);
Voici comment vous pouvez l'obtenir
// Process the uploaded items
Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {
String name = item.getFieldName();//text1
String value = item.getString();
} else {
processUploadedFile(item);
}
}
MultipartRequest req = new MultipartRequest(request, UPLOAD_PATH, 1024 * 1024 * 1024);
out.print(req.getParameter("contractNo"));
out.println("<BR>");
Enumeration files = req.getFileNames();
while (files.hasMoreElements()) {
String name = (String) files.nextElement();
String filename = req.getFilesystemName(name);
String type = req.getContentType(name);
File uploadedFile = req.getFile("xlFile");
FileInputStream fis = new FileInputStream(uploadedFile);
BufferedReader in = new BufferedReader(new InputStreamReader(fis));
FileWriter fstream = new FileWriter(UPLOAD_PATH + name, true);
BufferedWriter out11 = new BufferedWriter(fstream);
String aLine = null;
while ((aLine = in.readLine()) != null) {
//Process each line and add output to Dest.txt file
out11.write(aLine);
out11.newLine();
}
// do not forget to close the buffer reader
in.close();
// close buffer writer
out11.close();
}
Le code ci-dessus lira le fichier avec d'autres données de formulaire. Il suffit de jeter un coup d'œil à la méthode req.getParameter();
de l'objet MultipartRequest req
com.oreilly.servlet.MultipartRequest
dans votre servlet/fichier .Java contenu dans Web-Inf/classes
dans votre méthode de servlets doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
add
MultipartRequest m = new MultipartRequest (request, "C:\SavingDirectory");
appelez ensuite vos variables à partir du formulaire ci-dessous;
String pdate = m.getParameter("plandate");
et les imprimer depuis le servlet comme out.println(pdate);
La meilleure pratique pour récupérer des champs de formulaire HTML dans Servlet consiste à utiliser le fichier jar Apache commons-fileupload 1.3.
En utilisant itérateur, effectuez une itération via HTTPServletRequest en plusieurs parties et utilisez une boucle for pour vérifier si
String item1=null,item2=null,item3=null;
if(item.isFormField())
{
if(item.getFieldName().equals("field1"))
{
item1=item.getString();
}
if(item.getFieldName().equals("field2"))
{
item2=item.getString();
}
if(item.getFieldName().equals("field3"))
{
item3=item.getString();
}
}
et votre fichier HTML devrait être comme ça
<html>
<body>
<form action="servletname" method="post" enctype="multipart/form-data">
<input type="text" name="field1">
<input type="text" name="field2">
<input type="text" name="field3">
<input type="file" name="filetoupload">
<input type="submit" value="Upload">
</form>
</body>
</html>