web-dev-qa-db-fra.com

Envoi de données supplémentaires en plusieurs parties

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.

  • L'option 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.
  • Ou y a-t-il un autre problème dans mon code?
9
Bhushan

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.

11
Harry Joy

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);
    }
}
13
Sudhakar
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

1
Bhushan Dhamdhere
  1. téléchargez le fichier jar com.oreilly.servlet.MultipartRequest
  2. importer com.oreilly.servlet.MultipartRequest dans votre servlet/fichier .Java contenu dans Web-Inf/classes
  3. 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);

0
Wandile Nxumalo

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>
0
Cobweb