SpringMVC文件上传——bean的配置【org.springframework.web.multipart.commons.CommonsMultipartResolver】

一、简介

  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  * <p>Provides "maxUploadSize", "maxInMemorySize" and "defaultEncoding" settings as
 7  * bean properties (inherited from {@link CommonsFileUploadSupport}). See corresponding
 8  * ServletFileUpload / DiskFileItemFactory properties ("sizeMax", "sizeThreshold",
 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):

     <!--配置文件上传使用解析器-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 指定字符集为utf-8 -->
        <property name="defaultEncoding" value="UTF-8"></property>

        <!-- 指定上传文件最大尺寸 -->
        <property name="maxUploadSize" value="10240"/>

        <!-- 指定文件载入内存大小 -->
        <property name="maxInMemorySize " value="1024"/>

        <!-- 设置延时解析文件 -->
        <property name="resolveLazily " value="true"/>
    </bean>


SpringMVC文件上传——bean的配置【org.springframework.web.multipart.commons.CommonsMultipartResolver】

原文地址:https://www.cnblogs.com/wangzhijun97/p/9451463.html

时间: 2024-10-17 04:33:08

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

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

一.配置文件:SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file <!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver --> <beans:bean id="multipartResolver" class="org.springframework.web.multipart.com

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

文件上传项目的源码下载地址:http://download.csdn.net/detail/swingpyzf/6979915   一.配置文件:SpringMVC 用的是 的MultipartFile来进行文件上传 所以我们首先要配置MultipartResolver:用于处理表单中的file [html] view plain copy print? <!-- 配置MultipartResolver 用于文件上传 使用spring的CommosMultipartResolver --> &

SpringMVC文件上传的配置

记述一下步骤以备查. 准备工作: 需要把Jakarta Commons FileUpload及Jakarta Commons io的包放lib里. 我这边的包是: commons-fileupload-1.1.1.jar commons-io-1.3.2.jar 然后在spring-servlet.xml进行multipartResolver配置,不配置好上传会不好用. <bean id="multipartResolver" class="org.springfram

Springmvc文件上传

1.commons-fileupload-1.2.2.jar 2.commons-io-2.0.1.jar 2.要实现SpringMVC的文件上传,需要配置一下文件: 1 <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> 2 <bean id="multipartResolver" 3 class="org.springframework.web.multipart.commons.CommonsMultipa

SpringMVC文件上传实现

SpringMVC(注解)上传文件需要注意的几个地方:1.form的enctype="multipart/form-data",这个是上传文件必须的2.applicationContext.xml配置: <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器 --> <bean id="multipartResolver" class="org.springframework.web.multipart.

SpringMVC文件上传下载

在Spring MVC的基础框架搭建起来后,我们测试了spring mvc中的返回值类型,如果你还没有搭建好springmvc的架构请参考博文->http://www.cnblogs.com/qixiaoyizhan/p/5819392.html 今天我们来讲讲spring mvc中的文件上传和下载的几种方法. 首先附上文件目录->我们需要配置的我做了记号-> 一.文件上传 首先为了方便后续的操作,以及精简代码,我们在Utils包下封装一个文件上传下载的帮助类: Files_Helper

SpringMvc文件上传和下载

本篇博客将讲解的是Springmvc的文件上传和下载功能.对于上传功能,我们在项目中是经常会用到的,比如用户注册的时候,上传用户头像,这个时候就会使用到上传的功能.而对于下载,使用场景也很常见,比如我们项目中有个使用说明是是pdf版的,会提供给用户进行下载的功能.相对于来说,这两个功能都是很常见,废话不多说,按照惯例,我们先来看一下本篇博客的目录. 目录 一:搭建SpringMvc开发环境 二:实现文件上传的功能 三:将上传文件绑定到具体的对象上 四 : 实现用户下载的功能 五:总结 一:搭建S

SpringMVC学习总结(五)——SpringMVC文件上传例子

这是用的是SpringMVC-3.1.1.commons-fileupload-1.2.2和io-2.0.1 首先是web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/20

springMVC文件上传与下载(六)

1..文件上传 在springmvc.xml中配置文件上传解析器 <!-- 上传图片配置实现类,id必须为这个 --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <!-- 上传图片的大小 B 5M 1*1024*1024*5--> <property name