在一个带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