spring - 当我在 Spring Boot 应用程序中使用 CommonsMultipartResolver 时,MultipartFile 为 null

标签 spring file-upload spring-boot

我想在我的 Spring Boot 应用程序中实现上传处理程序方法。我想使用 CommonsMultipartResolver 而不是 StandardServletMultipartResolver。我遇到以下问题:

我的 Controller 方法参数(文件)始终设置为空。我在HiddenHttpMethodFilter的java文档中看到: 由于其固有的需要检查 POST 正文参数,因此在多部分 POST 请求的情况下,此过滤器需要在多部分处理后运行。

我尝试设置 multipartFilter bean 的顺序,但没有帮助。当我调试时,我发现 HiddenHttpMethodFilter 总是在 MultipartFilter 之前调用。我正在使用 Spring Boot 版本 1.3.0.RELEASE 和基于 Java 的配置。如何设置 HiddenHttpMethodFilterMultipartFilter 之后的顺序?

@Bean(name = "multipartResolver")
public CommonsMultipartResolver multipartResolver() {
    CommonsMultipartResolver resolver = new CommonsMultipartResolver();        
    resolver.setMaxUploadSizePerFile(52428800); 
    return resolver;
}

@Bean
@Order(0)
public MultipartFilter multipartFilter() {
        MultipartFilter multipartFilter = new MultipartFilter();
    multipartFilter.setMultipartResolverBeanName("multipartResolver");
    return multipartFilter;
}

@RequestMapping(value = "/{userId}", method = RequestMethod.POST)
@ResponseBody
public FileTransport create(@PathVariable("userId") Long userId,
        MultipartFile file) throws IOException {
    //return fileService.create(userId, file);
    return new FileTransport();
}

如果我修改方法以包含请求参数,如下所示:

@RequestParam(name = "file", required = true) MultipartFile 文件

它抛出异常:“所需的 MultipartFile 参数‘文件’不存在”。

如果我使用StandardServletMultipartResolver,一切都会按预期工作。

最佳答案

在 Spring Boot 中要使用 CommonsMultipartResolver,您需要通过在配置中添加以下注释来禁用 MultipartAutoConfiguration:

@EnableAutoConfiguration(exclude={MultipartAutoConfiguration.class})

我的多部分解析器 bean:

 @Bean
 public MultipartResolver multipartResolver() {
     CommonsMultipartResolver multipartResolver = new CommonsMultipartResolver();
     multipartResolver.setMaxUploadSize(5 * 1024 * 1024);
     return multipartResolver;
 }

关于spring - 当我在 Spring Boot 应用程序中使用 CommonsMultipartResolver 时,MultipartFile 为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37951569/

相关文章:

php - 使用AFNetworking和PHP从照片库上传所选图像

java - Spring 上传文件

java - 如何返回用户拥有的角色列表?

java - SpringBoot 和 JUnit - 测试服务类 - 无法加载应用程序上下文

spring - 如何在 Mockito 中注入(inject) Prototype bean

java - 用 thymeleaf 添加 css

spring - Rest 模板中带有 307 状态代码的空响应实体

java - 我需要我的 Spring Boot Web 应用程序在 JUnit 中重新启动

django - 使用 celery 任务将文件上传到 s3

java - HashMap 与 ConcurrentHashMap 与 LoadingCache( Guava )