2019独角兽企业重金招聘Python工程师标准>>>
在一个带enctype="multipart/form-data"属性的表单提交时发现,该表单中包含的其他input无法设置到对应方法参数中。
如下:
JSP:带enctype="multipart/form-data"属性的表单,包含一个username的input
<form action="${ctx}/console/article/testUpload"enctype="multipart/form-data" method="post"><input type="text" name="username"/><input type="file" name="uploadFile"/><input type="submit"/>
</form>
Controller:非常普通的两个方法,GET进入页面,POST输出表单中username的值(注意,没有处理uploadFile)。
@RequestMapping(value = "/testUpload", produces = "text/html;charset=utf-8", method = RequestMethod.GET)
public String testUpload() throws Exception {return "/uploadFile";
}
@RequestMapping(value = "/testUpload", produces = "text/html;charset=utf-8", method = RequestMethod.POST)
public String testUpload(String username) throws Exception {System.out.println(username);return "redirect:testUpload";
}
发现如下(以下各点相互独立互不影响):
1、填写username并选择文件后点击提交,username输出为null;
2、去掉表单的enctype属性,填写username并选择文件后点击提交,username输出正常;
3、向POST的方法添加MultipartFile uploadFile参数(修改结果如下),填写username并选择文件后点击提交,报错。
@RequestMapping(value = "/testUpload", produces = "text/html;charset=utf-8", method = RequestMethod.POST)
public String testUpload(String username, MultipartFile uploadFile) throws Exception {System.out.println(username);return "redirect:testUpload";
}
报错信息如下:
根据以上发现可知:
1、带enctype属性的表单,需要额外配置以解析其中的参数;
2、如果方法中的参数不处理文件,即没有MultipartFile参数,则不报错,也无法获取其他参数。
网上(见最后的链接)找到解决办法,得知需要配置multipartResolver来解析带enctype="multipart/form-data"属性的表单
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"><property name="defaultEncoding" value="utf-8"></property><property name="maxUploadSize" value="10485760000"></property><property name="maxInMemorySize" value="40960"></property>
</bean>
附:
https://segmentfault.com/q/1010000002786408