我有以下html表单...
<html>
<head><title>Upload Servlet</title></head>
<body><h2>Upload Servlet</h2>
<form name='uploadparams' enctype='multipart/form-data' action='' method='post'>
<label>Migrate Options From:
<select name='migrateFrom'>
<option></option>
<option value='version 1'>version 1</option>
</select>
</label>
<br/>
<input type='file' name='zipFile'>
<br/>
<input type='hidden' value='willnotshowupinservlet'/>
<button type='submit'>Submit</button>
</form>
</body>
</html>
问题是虽然我可以使用http参数名称“zipFile”读取文件,但我的servlet没有看到其他参数“willnotshowupinservlet”和“migrateFrom”。文件上传表单只能有一个输入(文件输入)吗?
答案 0 :(得分:5)
它们确实不能用作常规请求参数,因为您已将表单编码设置为multipart/form-data
(为了能够在请求正文中包含文件内容,这确实是必需的)。您必须解析请求正文符合multipart/form-data
规范。 Servlet API的getParameter()
调用仅支持application/x-www-form-urlencoded
的表单编码,这是HTML enctype
元素的默认<form>
。
用于简化工作的常用API是Apache Commons FileUpload。或者,当您已经使用Servlet 3.0时,需要使用@MultipartConfig
注释servlet。您可以在this answer中找到这两种方法的具体示例。