springmvc上傳文件方法及註意事項
阿新 • • 發佈:2018-01-03
類型 方式 part 配置 add default fig 方法 url
View Code
本文基於註解的配置,敬請留意 基於註解整合
一。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裏添加如下代碼:
1 /** 2 * 此處註意bean的名字一定起名為multipartResolver 3 * @return 4 */ 5 @Bean 6 public CommonsMultipartResolver multipartResolver() { 7 CommonsMultipartResolver commonsMultipartResolver = new CommonsMultipartResolver(); 8 commonsMultipartResolver.setDefaultEncoding(propertyConfig.getUploadDefaultEncoding());View Code9 commonsMultipartResolver.setMaxUploadSize(1024 * 1024 * propertyConfig.getMaxUploadSize());//字節為單位 10 return commonsMultipartResolver; 11 }
註意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; }View Code
三。配置方式基於servlet3.0+
此時我們需要在MyWebAppInitializer裏重寫 customizeRegistration 方法
1 /** 2 * servlet3.0+ 上傳文件 3 * 單個文件最大5M 4 * 總請求最大20M 5 * @param registration 6 */ 7 @Override 8 protected void customizeRegistration(ServletRegistration.Dynamic registration) { 9 String temp = System.getProperty("java.io.tmp"); 10 MultipartConfigElement multipartConfigElement = new MultipartConfigElement(temp, 5242880, 20971520, 0); 11 registration.setMultipartConfig(multipartConfigElement); 12 }View Code
在DispacherConfig裏添加如下bean
1 @Bean 2 public MultipartResolver multipartResolver() { 3 StandardServletMultipartResolver standardServletMultipartResolver = new StandardServletMultipartResolver(); 4 return standardServletMultipartResolver; 5 }View Code
註意bean的名字一定為:multipartResolver
如果您想通過配置實現,則需在web.xml裏配置代碼:
1 <servlet> 2 <servlet-name>dispatcher</servlet-name> 3 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 4 <load-on-startup>1</load-on-startup> 5 <multipart-config> 6 <file-size-threshold>0</file-size-threshold> 7 <location>c:/tmp</location> 8 <max-file-size>2000000</max-file-size> 9 <max-request-size>40000000</max-request-size> 10 </multipart-config> 11 </servlet> 12 <servlet-mapping> 13 <servlet-name>dispatcher</servlet-name> 14 <url-pattern>*.form</url-pattern> 15 </servlet-mapping>View Code
同樣需要在spring-bean裏的配置:
1 <bean id="multipartResolver" 2 class="org.springframework.web.multipart.support.StandardServletMultipartResolver"> 3 </bean>View Code
四。在controller中實現文件上傳
創建控制器UploadController並寫相關上傳代碼:
1 @PostMapping("/upload") 2 public String upload(@RequestParam(name = "file")MultipartFile file) throws IOException { 3 System.out.println(file.getOriginalFilename());//獲取文件名 4 FilenameUtils.getExtension(file.getOriginalFilename());//獲取文件類型 5 /* 6 省略拼接文件地址代碼 7 。。。 8 */ 9 file.transferTo(new File("上傳目標文件地址")); 10 11 return "uploadSuccess"; 12 }View Code
springmvc上傳文件方法及註意事項