首先我贴下我出问题的环境:
form 表单:
<form action="/upload" enctype="multipart/form-data" method="post" >
<input type="file" name="file"><br>
<input type="submit" value="提交">
</form>
1.enctype="multipart/form-data" 这个要有
2.name="file" file要有name
后端
@RequestMapping(value = "/upload",method = RequestMethod.POST)
@ResponseBody
public String upload(@RequestParam("file") MultipartFile file){
.....
}
可问题来了,后端收到的file总是null。
后来研究了一会儿才发现是因为自己在@configuration定义了MultipartResolver
bean的缘故
@Bean
public MultipartResolver multipartResolver(){
CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
multipartResolver.setMaxUploadSize(1000000);
return multipartResolver;
}
要解决null的问题,只要把自己定义的这个MultipartResolver
bean去掉就好了
原因在于:如果你使用的springboot那么springboot会自动给你配置 MultipartResolver
bean
我自己的
MultipartResolver
和springboot的自动配置差的主要地方是我用了CommonsMultipartResolver
而它用了StandardServletMultipartResolver
我看到这的时候还是不明白,为什么我自己定义MultipartResolver
就不行呢,照理说使用自己的配置而不使用springboot的自动配置是完全没问题的。
后来debug的时候我发现问题应该是出在了MultipartFile
然后是 MultipartFile
我觉得问题的根源出在了
MultipartFile
和MultipartResolver
不一致,从而导致了NULL(当然,我并没有具体的探究下去,这仅仅是我个人的猜测。如果这个理解有误,麻烦大神能告诉我一下,方便我修改。)
网友评论