zoukankan      html  css  js  c++  java
  • 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>
  • 相关阅读:
    2018级软件秋季总结
    对我影响最大的三位老师
    自我介绍
    Js中的一个日期处理格式化函数
    SQL update语句加减乘除运算
    用css让一个容器水平垂直
    position:absolute 的深入探讨
    java正则表达式
    Session
    使用Cookie进行会话管理
  • 原文地址:https://www.cnblogs.com/dashenaichicha/p/11985592.html
Copyright © 2011-2022 走看看