2016-05-14 2 views
0

Ich lade Datei von HTML-Formular:Wie kann ich Informationen von einem HTML-Formular in JAVA ohne Servlet erhalten?

<form class="formulario" action="validatorKenken.cgi" method="GET"> 
        <input type="file" name="xml" accept="*.xml"> <br/> 
        <input type="submit"> 
</form> 

Java-Datei für CGI-Datei aufgerufen wird, die durch die Form genannt wird. Ich muss die Datei, die ich hochlade, auf dem Server speichern.

Ich habe Lösungen mit Servlet gesehen, aber ich habe Probleme, es zu kompilieren, weil der Import javax.servlet nicht existiert.

Ich bin mit Java 1.7.0_101

Thank you!

Antwort

0

Im Skript wird die Umgebungsvariable CONTENT_TYPE auf either application/x-www-form-urlencoded or multipart/form-data festgelegt. Letzteres wird normalerweise nur für Formulare mit <input type=file> Kontrollen verwendet. In beiden Fällen befindet sich der Anfragetext in der Standardeingabe, die Java erben wird, zusammen mit allen Umgebungsvariablen.

Da Ihr Formular ein Dateifeld enthält, lautet der Inhaltstyp multipart/form-data. Der Text enthält eine mehrteilige MIME-Nachricht.

eine mehrteilige MIME-Nachricht parsen ist eine Größenordnung einfacher, wenn Sie eine JavaMail Implementierung verwenden, da Sie von seiner MimeMultipart Klasse und die zugehörigen Klassen machen können:

Path saveDir = Paths.get("/home/enery93/Downloads"); 

// id or name attribute of HTML <input type='file'> element 
String fileInputControlName = "file"; 

Path formDataFile = Files.createTempFile(null, null); 
Files.copy(System.in, formDataFile, StandardCopyOption.REPLACE_EXISTING); 

MimeMultipart formData = new MimeMultipart(
    new FileDataSource(formDataFile.toFile())); 

int count = formData.getCount(); 
for (int i = 0; i < count; i++) { 
    BodyPart part = formData.getBodyPart(i); 

    // See HTML 4.01 spec, section 17.13.4 at 
    // https://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2 
    ContentDisposition disposition = 
     new ContentDisposition(part.getDisposition()); 
    String name = disposition.getParameter("name"); 

    if (fileInputControlName.equals(name)) { 
     Path saveFile = saveDir.resolve(part.getFileName()); 
     try (InputStream content = part.getInputStream()) { 
      Files.copy(content, saveFile); 
     } 
     break; 
    } 
} 

Files.delete(formDataFile); 

Zum Zeitpunkt des Schreibens, ein Vollständiges javax.mail.jar ist verfügbar unter .

Wenn Sie JavaMail nicht verwenden können oder wollen, müssen Sie den mehrteiligen Inhalt selbst analysieren, was nicht angenehm ist.

+0

Ich kann JavaMail nicht verwenden. Also, was muss ich tun? – Enery93

+0

Um die Datei zu verwalten, reicht diese Zeile? "Zeichenfolge fileInputControlName =" Datei ";" Aber wenn der Typ String ist und ich mit einer Binärdatei arbeite, wie kann das möglich sein? – Enery93

+0

Wie ich im obigen Kommentar auf diese Codezeile hingewiesen habe, ist das nur der Wert des Attributs 'id' oder 'name', das im HTML-Code auftritt. Der Inhalt der Datei ist irrelevant. – VGR

Verwandte Themen