SpringMVC进行文件上传时,接收不到文件, MultipartFile 类型参数报空指针异常

使用纯注解开发时, 我们要注入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;
    }

若有不对的地方, 望各位大佬及时指正,多谢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值