[英]How can I get info from a html form in JAVA without servlet?
我正在以HTML格式上传文件:
<form class="formulario" action="validatorKenken.cgi" method="GET">
<input type="file" name="xml" accept="*.xml"> <br/>
<input type="submit">
</form>
Java文件被CGI文件调用,该文件由表单调用。 我需要将要上传的文件保存在服务器上。
我已经看到了使用servlet的解决方案,但是由于导入javax.servlet不存在,因此无法编译它。
我正在使用Java 1.7.0_101
谢谢!
该脚本会将CONTENT_TYPE环境变量设置为application / x-www-form-urlencoded或multipart / form-data 。 后者通常仅用于具有<input type=file>
控件的表单。 无论哪种方式,请求正文都将在Java将继承的标准输入以及所有环境变量中。
由于您的表单具有文件字段,因此内容类型将为multipart/form-data
。 主体将包含多部分的MIME消息。
如果您使用JavaMail实现,则解析多部分MIME消息会容易一个数量级,因为您可以利用其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);
在撰写本文时,可以从http://java.net/projects/javamail/downloads/download/javax.mail.jar获得完整的javax.mail.jar。
如果您不能或不愿意使用JavaMail,则必须自己解析多部分内容,这并不令人愉快。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.