使用纯注解开发时, 我们要注入CommonsMultipartResolver 这个Bean
@Configuration
@ComponentScan(value = "com.abca", includeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = {Controller.class}))
@EnableWebMvc
public class SpringMVCConfiguration implements WebMvcConfigurer {
// 静态资源放行
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
// @Bean("multipartResolver") creatCommonsMultipartResolver
@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
commonsMultipartResolver.setDefaultEncoding("UTF-8");
// 设置最大文件大小,单位为字节 所有文件
commonsMultipartResolver.setMaxUploadSize(209715200000L);
// 设置单个文件上传最大字节
commonsMultipartResolver.setMaxUploadSizePerFile(10245760000L);
return commonsMultipartResolver;
}
}
controller代码
@Controller
public class UploadController {
@RequestMapping("/uploadFile")
public String testUpload(MultipartFile multipartFile) throws IOException {
multipartFile.transferTo(new File("D:/upload1234/" + multipartFile.getOriginalFilename()));
return "success.jsp";
}
}
之前controller一直接收不到文件, 报空指针,一直找不到原因, 所有代码都确认没有问题.包括传参的参数名. 后边使用XML方式配置了一遍,发现正常运行.所有考虑是配置问题
原因: 在使用@Bean注入CommonsMultipartResolver 时,最初的方法名是:creatCommonsMultipartResolver 最后改成了 multipartResolver() 这样就能接收到了.
还有一点是不要忘记将配置类 配置到应用程序上下文,如果没有加入到应用程序上下文,配置类的类名会有黄色底色警告, 如果是XML配置方式的话警告是下边这样:
以上问题解决方式都是自己摸索, 如果有错误的地方或者不足的地方,希望大家可以帮我及时指正,谢谢
最后突然想到还有一种可能,我们使用CommonsMultipartResolver
来处理文件上传,Bean的名称对于上传也非常重要, Spring MVC会自动检测名为multipartResolver
的bean, 并将其用于处理文件上传请求。如果你的bean没有命名为multipartResolver
,则Spring MVC不会自动将其用作文件上传解析器,这会导致文件上传失败,将无法接收到文件。
最终就是要保证注入CommonsMultipartResolver的Bean的名称要为multipartResolver, 严格按照SpringMVC的约定来可以这样:
@Bean("multipartResolver")
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
commonsMultipartResolver.setDefaultEncoding("UTF-8");
// 设置最大文件大小,单位为字节 所有文件
commonsMultipartResolver.setMaxUploadSize(209715200000L);
// 设置单个文件上传最大字节
commonsMultipartResolver.setMaxUploadSizePerFile(10245760000L);
return commonsMultipartResolver;
}
若有不对的地方, 望各位大佬及时指正,多谢