1. 程式人生 > >springmvc上傳文件方法及註意事項

springmvc上傳文件方法及註意事項

類型 方式 part 配置 add default fig 方法 url

本文基於註解的配置,敬請留意 基於註解整合

一。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());
9 commonsMultipartResolver.setMaxUploadSize(1024 * 1024 * propertyConfig.getMaxUploadSize());//字節為單位 10 return commonsMultipartResolver; 11 }
View Code

註意bean的名字一定為:multipartResolver,賊惡心,曾經起別的名字死活報錯

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

技術分享圖片
#註意以兆為單位
spring.web.max.upload.size=30 
spring.web.fileupload.encoding=utf-8
View Code

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上傳文件方法及註意事項