springmvc上传文件方法及注意事项

本文基于注解的配置,敬请留意  基于注解整合

一。springmvc为我们提供两种上传方式配置:

  1. org.springframework.web.multipart.commons.CommonsMultipartResolver (基于commons-fileupload.jar)
  2. org.springframework.web.multipart.support.StandardServletMultipartResolver (基于servlet3.0+)

二。配置方式基于commons-fileupload.jar

1)在先前的类DispacherConfig里添加如下代码:

 /**
* 此处注意bean的名字一定起名为multipartResolver
* @return
*/
@Bean
public CommonsMultipartResolver multipartResolver() {
CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver();
commonsMultipartResolver.setDefaultEncoding(propertyConfig.getUploadDefaultEncoding());
commonsMultipartResolver.setMaxUploadSize(1024 * 1024 * propertyConfig.getMaxUploadSize());//字节为单位
return commonsMultipartResolver;
}

注意bean的名字一定为:multipartResolver,贼恶心,曾经起别的名字死活报错

2)在先前的application.properties添加如下代码:

#注意以兆为单位
spring.web.max.upload.size=30
spring.web.fileupload.encoding=utf-8

3)更改propertyConfig类添加对应的属性:

    @Value("${spring.web.max.upload.size}")
private Integer maxUploadSize; @Value("${spring.web.fileupload.encoding}")
private String uploadDefaultEncoding="utf-8"; public String getUploadDefaultEncoding() {
return uploadDefaultEncoding;
} public Integer getMaxUploadSize() {
return maxUploadSize;
}

三。配置方式基于servlet3.0+

此时我们需要在MyWebAppInitializer里重写 customizeRegistration 方法

  /**
* servlet3.0+ 上传文件
* 单个文件最大5M
* 总请求最大20M
* @param registration
*/
@Override
protected void customizeRegistration(ServletRegistration.Dynamic registration) {
String temp = System.getProperty("java.io.tmp");
MultipartConfigElement multipartConfigElement = new MultipartConfigElement(temp, 5242880, 20971520, 0);
registration.setMultipartConfig(multipartConfigElement);
}

在DispacherConfig里添加如下bean

  @Bean
public MultipartResolver multipartResolver() {
StandardServletMultipartResolver standardServletMultipartResolver = new StandardServletMultipartResolver();
return standardServletMultipartResolver;
}

注意bean的名字一定为:multipartResolver

如果您想通过配置实现,则需在web.xml里配置代码:

  <servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<multipart-config>
<file-size-threshold>0</file-size-threshold>
<location>c:/tmp</location>
<max-file-size>2000000</max-file-size>
<max-request-size>40000000</max-request-size>
</multipart-config>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>*.form</url-pattern>
</servlet-mapping>

同样需要在spring-bean里的配置:

 <bean id="multipartResolver"
class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
</bean>

四。在controller中实现文件上传

创建控制器UploadController并写相关上传代码:

 @PostMapping("/upload")
public String upload(@RequestParam(name = "file")MultipartFile file) throws IOException {
System.out.println(file.getOriginalFilename());//获取文件名
FilenameUtils.getExtension(file.getOriginalFilename());//获取文件类型
/*
省略拼接文件地址代码
。。。
*/
file.transferTo(new File("上传目标文件地址")); return "uploadSuccess";
}
上一篇:spring boot与jdbcTemplate的整合案例2


下一篇:Salesforce Lightning Builder Flows (Salesforce Lightning 构建Flows)