該腳本的CONTENT_TYPE環境變量設置爲either application/x-www-form-urlencoded or multipart/form-data。後者通常僅用於使用<input type=file>
控件的表單。無論哪種方式,請求主體都將處於標準輸入中,Java將繼承所有環境變量。
由於您的表單有一個文件字段,內容類型將爲multipart/form-data
。正文將包含多部分MIME消息。
解析多部分MIME消息是一個數量級的更容易,如果您使用的是JavaMail實現,因爲你可以利用它MimeMultipart類,及其相關類:
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);
在撰寫本文時,一完整的javax.mail.jar位於http://java.net/projects/javamail/downloads/download/javax.mail.jar。
如果你不能或不願意使用JavaMail,你將不得不自己解析多部分內容,這是不愉快的。
來源
2016-05-14 22:26:25
VGR
我無法使用JavaMail。那麼,我必須做什麼? – Enery93
爲了能夠管理文件,用這一行就夠了? 「String fileInputControlName =」file「;」但是,如果類型是字符串,並且我正在處理二進制文件,它怎麼可能? – Enery93
正如我在上面的註釋中指出的那樣,這只是HTML中出現的'id'或'name'屬性的值。該文件的內容是無關緊要的。 – VGR