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.
Ich kann JavaMail nicht verwenden. Also, was muss ich tun? – Enery93
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
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