2013-02-27 12 views
7

Ich verwende apache-commons-fileupload, um Datei von client zu zu erhalten (mit JSP und Servlet).Senden von zusätzlichen Daten mit multipart

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> 

Servlets: GetFile

System.out.println(request.getParameter("text1")); 

Ich bin in der Lage, die Datei auf den Server zu laden, aber ich bin nicht in der Lage, den Wert von text1 zu erhalten in der servlet (ich bekomme null Wert von text1 in der servlet), brauche ich diese textfield in der Form, um einige zusätzliche Informationen einzureichen, während es auf die server hochgeladen wird.

  • Ist enctype="multipart/form-data" Option Form erlaubt keine andere Formulardaten übergeben werden? Wenn es nicht erlaubt ist, was sind die anderen Optionen, die ich zusätzlich textfield an die server senden muss.
  • Oder gibt es ein anderes Problem in meinem Code?
+0

Sie können javascript oder jquery verwenden, um die Daten im Textfeld – Biswajit

+5

@Biswajit zu setzen, das nichts mit dem Problem des OP zu tun hat. – Uooo

+0

Könnte es sein, dass Sie mehr Eingabefelder haben mit 'name =" text1 "'? Ursache 'request.getParameter (...)' ruft nur den ersten Wert eines Parameters ab, wenn Sie mehr mit dem gleichen 'name' Attribut haben, ist der erste möglicherweise leer und daher null. – Uooo

Antwort

9

Ist enctype="multipart/form-data" Option Form erlaubt keine andere Formulardaten übergeben werden? Wenn es nicht erlaubt ist, was sind die anderen Optionen, die ich dieses zusätzliche Textfeld an den Server senden muss.

Nein, es gibt kein Problem mit der Verwendung von enctype="multipart/form-data". Sie können andere Felder erhalten und dann in einer solchen Form ablegen.

Oder gibt es ein anderes Problem in meinem Code?

Ja, für jetzt. Bei Verwendung von enctype="multipart/form-data" können Sie Parameter nicht direkt mit request.getParameter(name); abrufen. Während der Verwendung sind Formularfelder nicht als Parameter der Anfrage verfügbar, sie sind im Stream enthalten, so dass Sie es nicht auf die normale Weise erhalten können. Sie können einen Weg finden, dies in the docs of using commons-fileupload zu tun, unter dem Abschnitt Verarbeitung der hochgeladenen Artikel.

+0

danke (und +1), es funktioniert. – Bhushan

9

Nun sind die Parameter nicht verloren, es ist nur, dass sie Teil der Anfrage Stream sind.

Sie müssen alle Elemente aus dem Antrag erhalten und iterieren und behandeln sie entsprechend auf der Grundlage ihrer Elementtyp

List items = upload.parseRequest(request); 

Heres, wie Sie es

bekommen
// 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); 
    } 
} 
+0

danke (und +1), es funktioniert. – Bhushan

0
  1. das Glas herunterladen Datei com.oreilly.servlet.MultipartRequest
  2. importieren Sie com.oreilly.servlet.MultipartRequest in Ihrem Servlet /.Java-Datei in Web-Inf/classes
  3. in Ihrer Servlets doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Methode

    MultipartRequest m = new MultipartRequest hinzufügen enthielt (Antrag, "C: \ SavingDirectory");

dann rufen Sie Ihre Variablen aus dem Formular wie folgt;

String pdate = m.getParameter("plandate"); 

und drucken Sie diese aus dem Servlet wie out.println(pdate);

0

Die beste Vorgehensweise HTML-Formularfelder in Servlet abzurufen ist Apache commons-Fileupload 1.3 jar zu verwenden.

Mit Iterator durchlaufen mehrt HttpServletRequest und eine for-Schleife verwenden, um zu überprüfen, ob es isFormField(), dann

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(); 
     } 


    } 

und Ihre HTML-Datei wie diese

sein sollte
<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> 
1
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(); 
    } 

Above Code wird Datei zusammen mit anderen Daten lesen, lesen Sie einfach req.getParameter(); Methode MultipartRequest req Objekt