2011-02-23 66 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找到兩種方法的具體例子。