springMVC實現表單上傳文件,MultipartResolver介紹及配置


@大神愛吃茶

springMVC中配置CommonsMultipartResolver,介紹MultipartResolver的使用

  一、MultipartResolver的配置綜述

  MultipartResolver是專門處理文件上傳的一個類,比如我們在前台上傳文件到如FTP服務器。

  MultipartResolver的使用:

  使用MultipartResolver需要在pom中引入兩個包:

 1 <!-- 文件上傳的相關 -->
 2     <dependency>
 3       <groupId>commons-fileupload</groupId>
 4       <artifactId>commons-fileupload</artifactId>
 5       <version>1.2.2</version>
 6     </dependency>
 7     <dependency>
 8       <groupId>commons-io</groupId>
 9       <artifactId>commons-io</artifactId>
10       <version>2.0.1</version>
11     </dependency>

  同時使用MultipartResovler需要在springMVC的配置文件dispatcher-Servlet.xml中進行以下的配置:

1 <!--配置文件上傳相關-->
2 <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
3     <!-- 設定文件上傳的最大值-->
4     <property name="maxUploadSize" value="10485760"></property>
5     <!-- 設定文件上傳時寫入內存的最大值,如果小於這個參數不會生成臨時文件,默認為10240 -->
6     <property name="maxInMemorySize" value="4096"></property>
7     <!-- 設定默認編碼 -->
8     <property name="defaultEncoding" value="UTF-8"></property>
9 </bean>

  當我們發起請求的時候會通過dispatcher-Servlet來攔截請求,DispatcherServlet.java中的checkMultipart方法會調用MultipartResovler類中的isMultipart()方法來判斷請求中是否帶有文件,返回boolean的值。

 1 protected HttpServletRequest checkMultipart(HttpServletRequest request) throws MultipartException {  2         if (this.multipartResolver != null && this.multipartResolver.isMultipart(request)) {  3             if (WebUtils.getNativeRequest(request, MultipartHttpServletRequest.class) != null) {  4                 logger.debug("Request is already a MultipartHttpServletRequest - if not in a forward, " +
 5                         "this typically results from an additional MultipartFilter in web.xml");  6  }  7             else if (hasMultipartException(request) ) {  8                 logger.debug("Multipart resolution failed for current request before - " +
 9                         "skipping re-resolution for undisturbed error rendering"); 10  } 11             else { 12                 try { 13                     return this.multipartResolver.resolveMultipart(request); 14  } 15                 catch (MultipartException ex) { 16                     if (request.getAttribute(WebUtils.ERROR_EXCEPTION_ATTRIBUTE) != null) { 17                         logger.debug("Multipart resolution failed for error dispatch", ex); 18                         // Keep processing error dispatch with regular request handle below
19  } 20                     else { 21                         throw ex; 22  } 23  } 24  } 25  } 26         // If not returned before: return original request.
27         return request; 28     }

 1 boolean isMultipart(HttpServletRequest request); 

  如果解析到請求中包含的有文件的話就會調用MultipartResovler類的resolveMultipart()方法。

 1 MultipartHttpServletRequest resolveMultipart(HttpServletRequest request) throws MultipartException; 

  然后將文件數據解析成 MultipartFile 並封裝在 MultipartHttpServletRequest對象中,最后傳遞給 Controller。

1 public interface MultipartHttpServletRequest extends HttpServletRequest, MultipartRequest

  二、MultipartResolver的使用簡例:

  往往我們在前台通過springMVC實現表單提交的方式來上傳文件:

1 <form action="${pageContext.request.contextPath}/請求接口" method="post" enctype="multipart/form-data">
2      <input type="file" name="file">
3      <input type="submit" value="提交">
4 </form>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM