2011-02-23 132 views
1

我有以下的HTML表单...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参数名的文件就好了我的servlet没有看到其他参数“willnotshowupinservlet”和“migrateFrom”。文件上传表单是否只能有一个输入(文件输入)?

回答

5

由于您已将表单编码设置为multipart/form-data(为了能够在请求正文中包含文件内容的确是强制性的),所以它们确实不可用作常规请求参数。您必须解析请求主体符合multipart/form-data规范。 Servlet API的getParameter()调用仅支持表格编码application/x-www-form-urlencoded,这是HTML <form>元素的默认enctype

缓解这项工作的常用API是Apache Commons FileUpload。或者,当您已经使用Servlet 3.0时,您需要使用@MultipartConfig对servlet进行注释。你可以在this answer找到两种方法的具体例子。