一、简介

  Spring MVC支持一个通用的多路上传解析器CommonsMultipartResolver,在Spring的配置文件中对CommonsMultipartResolver Bean进行配置时,有一些可选的属性配置。


二、分析

  经过百度和查看SpringMVC的API文档都没有发现相关的详细配置介绍,无可奈何只能查看源代码寻找蛛丝马迹:

  在Spring配置文件applicationContext.xml中配置了CommonsMultipartResolver Bean后,按 “ Ctrl+鼠标左击 ‘org.springframework.web.multipart.commons.CommonsMultipartResolver’ ” 进入其源代码界面,而在源代码中并没有发现直接声明的如"maxUploadSize"这样的属性。

   经过仔细查看,在源代码中,CommonsMultipartResolver类上的注释上看到了相关表述(如下标红加大字体):

  1. /**
  2. * Servlet-based {@link MultipartResolver} implementation for
  3. * <a href="http://commons.apache.org/proper/commons-fileupload">Apache Commons FileUpload</a>
  4. * 1.2 or above.
  5. *
  6. 6 * <p>Provides "maxUploadSize", "maxInMemorySize" and "defaultEncoding" settings as
  7. 7 * bean properties (inherited from {@link CommonsFileUploadSupport}). See corresponding
  8. 8 * ServletFileUpload / DiskFileItemFactory properties ("sizeMax", "sizeThreshold",
  9. 9 * "headerEncoding") for details in terms of defaults and accepted values.
  10. *
  11. * <p>Saves temporary files to the servlet container's temporary directory.
  12. * Needs to be initialized <i>either</i> by an application context <i>or</i>
  13. * via the constructor that takes a ServletContext (for standalone usage).
  14. *
  15. * @author Trevor D. Cook
  16. * @author Juergen Hoeller
  17. * @since 29.09.2003
  18. * @see #CommonsMultipartResolver(ServletContext)
  19. * @see #setResolveLazily
  20. * @see org.springframework.web.portlet.multipart.CommonsPortletMultipartResolver
  21. * @see org.apache.commons.fileupload.servlet.ServletFileUpload
  22. * @see org.apache.commons.fileupload.disk.DiskFileItemFactory
  23. */
  24. public class CommonsMultipartResolver extends CommonsFileUploadSupport
  25. implements MultipartResolver, ServletContextAware {
  26. ...

  可以看到,其中包含了"maxUploadSize", "maxInMemorySize" ,"defaultEncoding"三个可供在Bean中配置的属性:

  •  maxUploadSize :用于限制上传文件的最大尺寸,单位为字节;
  •  maxInMemorySize :读取文件到内存中最大的字节数(相当于缓存),默认是1024,单位为字节;
  •  defaultEncoding :表示请求的编码格式,默认为iso-8859-1。

  此外,在源代码中还可以发现包含了一个已声明的属性和相应的setter方法:

  属性:resolveLazily

  1. private boolean resolveLazily = false;

  对应的setter方法:

  1. /**
  2. * Set whether to resolve the multipart request lazily at the time of
  3. * file or parameter access.
  4. * <p>Default is "false", resolving the multipart elements immediately, throwing
  5. * corresponding exceptions at the time of the {@link #resolveMultipart} call.
  6. * Switch this to "true" for lazy multipart parsing, throwing parse exceptions
  7. * once the application attempts to obtain multipart files or parameters.
  8. */
  9. public void setResolveLazily(boolean resolveLazily) {
  10. this.resolveLazily = resolveLazily;
  11. }

  因此,可以推断出,通过Spring的依赖注入功能,可以在Bean中配置和注入该属性,经过一番查询得知:

  •  resolveLazily :判断是否要延迟解析文件。当 resolveLazily为false(默认)时,会立即调用 parseRequest() 方法对请求数据进行解析,然后将解析结果封装到 DefaultMultipartHttpServletRequest中;而当resolveLazily为 true时,会在DefaultMultipartHttpServletRequest的initializeMultipart()方法调用parseRequest()方法对请求数据进行解析,而initializeMultipart()方法又是被getMultipartFiles()方法调用,即当需要获取文件信息时才会去解析请求数据,这种方式用了懒加载的思想。

三、示例

  配置一个CommonsMultipartResolver Bean(XML):

  1. <!--配置文件上传使用解析器-->
  2. <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
  3. <!-- 指定字符集为utf-8 -->
  4. <property name="defaultEncoding" value="UTF-8"></property>
  5.  
  6. <!-- 指定上传文件最大尺寸 -->
  7. <property name="maxUploadSize" value="10240"/>
  8.  
  9. <!-- 指定文件载入内存大小 -->
  10. <property name="maxInMemorySize" value="1024"/>
  11.  
  12. <!-- 设置延时解析文件 -->
  13. <property name="resolveLazily" value="true"/>
  14. </bean>

SpringMVC文件上传——bean的配置【org.springframework.web.multipart.commons.CommonsMultipartResolver】的更多相关文章

  1. SpringMVC 文件上传配置,多文件上传,使用的MultipartFile(转)

    文件上传项目的源码下载地址:http://download.csdn.net/detail/swingpyzf/6979915   一.配置文件:SpringMVC 用的是 的MultipartFil ...

  2. SpringMVC 文件上传配置,多文件上传,使用的MultipartFile

    一.配置文件:SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file <!-- 配置Multipa ...

  3. SpringMVC文件上传的配置

    记述一下步骤以备查. 准备工作: 需要把Jakarta Commons FileUpload及Jakarta Commons io的包放lib里. 我这边的包是: commons-fileupload ...

  4. springmvc 文件上传实现(不是服务器的)

    1.spring使用了apache-commons下的上传组件,因此,我们需要引用2个jar包 1)apache-commons-fileupload.jar 2 ) apache-commons-i ...

  5. SpringMVC文件上传和下载

    上传与下载 1文件上传 1.1加入jar包 文件上传需要依赖的jar包 1.2配置部件解析器 解析二进制流数据. <?xml version="1.0" encoding=& ...

  6. springMVC文件上传

    参考的地址:http://www.tuicool.com/articles/nMVjaiF 1.需要使用的jar. commons-fileupload.jar与commons-io-1.4.jar二 ...

  7. SpringMVC 文件上传&拦截器&异常处理

    文件上传 Spring MVC 为文件上传提供了直接的支持,这种支持是通过即插即用的 MultipartResolver 实现的.Spring 用 Jakarta Commons FileUpload ...

  8. SpringMVC文件上传下载

    在Spring MVC的基础框架搭建起来后,我们测试了spring mvc中的返回值类型,如果你还没有搭建好springmvc的架构请参考博文->http://www.cnblogs.com/q ...

  9. SpringMVC文件上传实现

    SpringMVC(注解)上传文件需要注意的几个地方:1.form的enctype="multipart/form-data",这个是上传文件必须的2.applicationCon ...

随机推荐

  1. JavaSE集合基础总览

    Java集合 Java集合,也称之为容器.基本上你写所有的Java程序,都必须要用到一个包.该API基本都位于java.util工具类包中,是JavaSE中的重中之重.简单可以总结为“1136”,分别 ...

  2. arm寄存器解析

    寒假闲来无事准备将自己的走过的arm之路总结一下,今天就先从arm的寄存器说起吧,欢迎各位拍砖. 要介绍arm寄存器之前我们要先了解一下arm处理器的工作模式: Arm处理器有七种工作模式,为的是形成 ...

  3. (转)轻松解决 MyEclipse、Eclipse 编译时提示 @Override The method of type must override a superclass method 即 @Override 标注问题

    刚才在把工程从其他地方导入到自己机子的 MyEclipse 下时,出现了 The method of type must override a superclass method ,提示的是实现类必须 ...

  4. Struts2 简介及学习方法介绍

    Struts2 =  webwork + struts1.x 尊重学习规律的操作 学习上痛苦的根源之一是只能走的时候逼我来跑 不是说深入的内容就不讲了,而是放到合适的时候讲 一段时间可以,长了集中不了 ...

  5. C#设计模式--适配器模式(结构型模式)

    一.适配器模式介绍: 适配器模式:将一个类的接口,转换成客户希望的另外一个接口.adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 例子分析(充电器充电): 模式中的角色: 安 ...

  6. 使用ActiveMQ 传输文件 以及使用Jetty搭建内嵌文件服务器

    使用Active发送文件 ActiveMq 本身提供对于传输文件的支持. 1. 直接传输文件: 使用connection.createOutputStream 的形式.这种方式适合小文件.不能传输大文 ...

  7. JavaScript 面向对象编程(三):非构造函数对象的继承

    JavaScript 面向对象编程(三):非构造函数对象的继承 一.什么是"非构造函数"的继承? 比如,现在有一个对象,叫做"中国人". var Chinese ...

  8. C盘空间太大,分区助手减小分区大小教程

    首先看一个需要缩小C盘或需要减少分区空间的一个例子:“我的电脑里C盘剩余空间为530GB,除了C盘外还有一个D盘,但D盘的空间不到30GB,另外还有两个隐藏分区,一个200MB,一个15GB.我想把C ...

  9. js从入门到精通到深入到就业

    本篇博客是我参看人家代码做的总结,个人感觉非常非常好,简单.步步深入,不用花大量时间来学完正本js,只需要把其中的代码理解透彻,上班无压力(上班无压力是指js部分,包括查看框架源代码都有很大帮助) / ...

  10. 超好用的一个JQUERY分页器-jpaginate

    jpaginate是一个自带滑动动画效果的jQuery分页插件,用户可以通过单击或只是悬停在箭头上的使页码滑动显示. 你可以用下面的方式调用插件: $(elementID).paginate() 您可 ...