Java 如何在Spring引导中使用CommonsMultipartResolver
我曾尝试在引导中使用CommonsMultipartResolver将我的旧应用程序(WAR)转换为引导,现在它得到了以下代码:Java 如何在Spring引导中使用CommonsMultipartResolver,java,spring,spring-boot,apache-commons,Java,Spring,Spring Boot,Apache Commons,我曾尝试在引导中使用CommonsMultipartResolver将我的旧应用程序(WAR)转换为引导,现在它得到了以下代码: @Configuration public class TestConfig { @Bean public FilterRegistrationBean openEntityManagerFilterRegistrationBean() { // Set upload filter
@Configuration
public class TestConfig {
@Bean
public FilterRegistrationBean openEntityManagerFilterRegistrationBean() {
// Set upload filter
final MultipartFilter multipartFilter = new MultipartFilter();
final FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(multipartFilter);
filterRegistrationBean.addInitParameter("multipartResolverBeanName", "commonsMultipartResolver");
return filterRegistrationBean;
}
@Bean
public CommonsMultipartResolver commonsMultipartResolver() {
final CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
commonsMultipartResolver.setMaxUploadSize(-1);
return commonsMultipartResolver;
}
}
这是引导的正确方式吗?因为我在application.properties中看到了一些属性。它们的用途是否与定义FilterRegistrationBean相同
# MULTIPART (MultipartProperties)
multipart.enabled=true
multipart.file-size-threshold=0 # Threshold after which files will be written to disk.
multipart.location= # Intermediate location of uploaded files.
multipart.max-file-size=1Mb # Max file size.
multipart.max-request-size=10Mb # Max request size.
有谁能提供一些样品来说明如何使用它吗?谢谢
顺便说一下,它试图设置属性“multipart.enabled=true”,我得到:
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'enabled' of bean class [org.springframework.boot.autoconfigure.web.MultipartProperties]: Bean property 'enabled' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1076)
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:927)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:95)
at org.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:749)
at org.springframework.validation.DataBinder.doBind(DataBinder.java:645)
at org.springframework.boot.bind.RelaxedDataBinder.doBind(RelaxedDataBinder.java:121)
at org.springframework.validation.DataBinder.bind(DataBinder.java:630)
at org.springframework.boot.bind.PropertiesConfigurationFactory.doBindPropertiesToTarget(PropertiesConfigurationFactory.java:253)
at org.springframework.boot.bind.PropertiesConfigurationFactory.bindPropertiesToTarget(PropertiesConfigurationFactory.java:227)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessBeforeInitialization(ConfigurationPropertiesBindingPostProcessor.java:296)
... 73 common frames omitted
首先,在
org.springframework.boot.autoconfigure.web.MultipartProperties
类中没有启用的属性
提及
如果您使用的是Servlet3容器,则无需使用commons文件上载机制,并且默认情况下启用了多部分支持。如果不想自定义任何多部分默认配置,也不需要在application.properties
中添加任何配置
<form method="post" action="upload" enctype="multipart/form-data">
File: <input type="file" name="file"/>
<input type="submit" value="Submit"/>
</form>
@RequestMapping(value="/upload", method=RequestMethod.POST)
public String upload(@RequestPart("file") MultipartFile multipartFile)
{
System.out.println(multipartFile.getOriginalFilename());
return "redirect:/";
}
当然,我们需要添加commons文件上传依赖项
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
文件上传
文件上传
1.3.1
这是Spring引导中的一个问题,将在1.2.5中修复。如果要使用CommonsMultipartFile
上载文件,请在Spring引导项目中添加@EnableAutoConfiguration(exclude={multipartutoconfiguration.class})
。禁用spring boot中的多部件配置
public RespDataView provisionalMediaUpload(@RequestParam("file") CommonsMultipartFile file,
@RequestParam("type") String type) {}
实际上,该配置是有缺陷的,如果希望与DispatcherServlet进行适当集成,bean的名称应该是
multipartResolver
,而不是comonsMultipartResolver
。此外,该筛选器不是必需的(仅当您将其与Spring Security结合使用时)。该类中确实没有启用的属性
,但是该属性应匹配以启用/禁用多部分配置。因此,基本上我认为在Spring Bug的多部分配置部分中有一个问题。此外,并非所有属性都需要映射到相应的类,还有其他使用application.properties
文件中定义的属性的方法。如果您查看Spring引导文档,其中有一个属性“multipart.enabled=true”,并显示为enabled值。如果无效,它为什么会存在?因此,“multipart.enabled=false”用于禁用引导的多部分自动配置
public RespDataView provisionalMediaUpload(@RequestParam("file") CommonsMultipartFile file,
@RequestParam("type") String type) {}