我想发布一个有很多字段的表单,其中一个是文件,当我这样做时
<form action="MediaManagementServlet" name="addMedia" method="post" enctype="multipart/form-data">
// many fileds
<label>upload file</label>
<input type="file" name="file" id="fileName"/>
它没有到达servlet,但是当我这样做时
<form action="MediaManagementServlet" name="addMedia" method="post" >
它到达servlet,但是当我得到文件的参数时它会打印出来的?
在哪里隐藏着我的观点?
答案 0 :(得分:3)
在两种情况下都应该到达servlet。您可能没有运行您认为正在运行的代码或者错误解释结果,或者有一些JavaScript接管了提交,但没有正确对待它。保存,重建,重新部署和重新启动所有内容。对于第一种情况下的所有字段,getParameter()
仅返回null
,对于第二种情况,仅返回文件。
对于null
参数问题,在使用multipart/form-data
编码时,数据未在请求正文中作为标准application/www-form-urlencoded
查询字符串发送。相反,它已在请求正文中以multipart/form-data
块的形式发送。 getParameter()
和consorts无法识别这一点,因此它们都返回null
。您需要使用getParts()
代替。
Collection<Part> parts = request.getParts();
// Loop through it and collect manually.
或者当你还在使用旧的Servlet 2.5或之前,那么你需要使用Apache Commons FileUpload来解析它。