Spring文件上传未绑定到模型属性对象
我想使用Spring MVC构建一个简单的文件上传function。
我有multipartResolver到位并正在工作:
上传文件时会记录下来:
DEBUG:[org.springframework.web.multipart.commons.CommonsMultipartResolver]: Found multipart file [imageUpload] of size 29081 bytes with original filename [xyz.jpg], stored at [/home/myuser/workspace/myProject/target/tmp/upload_67f1107c_1b8f_402c_bebd_6cd8a6e4c830_00000032.tmp]
这告诉我它基本上是有效的。
这是我的JSP的一部分:
...
这是我的模型属性对象的类:
public class PlaceEditForm { @Valid private Place place = new Place(); private Map features; private MultipartFile imageUpload; ... getter/setter omitted... }
这是我的Controller方法的一部分:
@RequestMapping(value="/save", method=RequestMethod.POST) public String savePlace (@Valid @ModelAttribute("placeForm") PlaceEditForm form, BindingResult result) { logger.debug("saveNewPlace"); logger.debug("Upload: "+form.getImageUpload()); // null ... return "redirect:/platz/"+place.getPlaceId(); }
所发生的是,表单对象的imageUpload属性未填充(null),而所有其他表单属性都是。
我发现它在控制器中使用它时确实有效:
@RequestMapping(value="/save", method=RequestMethod.POST) public String savePlace (@Valid @ModelAttribute("placeForm") PlaceEditForm form, BindingResult result, @RequestParam("imageUpload") MultipartFile upload, BindingResult uploadResult) { logger.debug("saveNewPlace"); logger.debug("Upload: "+upload); // Works!! ... return "redirect:/platz/"+place.getPlaceId(); }
因此,将MultipartFile作为@RequestParam
工作,但将其绑定到窗体的modelAttribute
对象则不然。 我在网上发现了数百个关于相同的例子,我没有发现差异。
我还在学习Spring,所以我可能会错过一个非常明显的观点。 我可以使用控制器的第二个版本,但我不明白,正如我所说,我正在学习。
不应该将
所有