SpringMVC中使用StandardServletMultipartResolver进行文件上传

概述

从Spring3.1开始,Spring提供了两个MultipartResolver的实现用于处理multipart请求。

  1. CommonsMultipartResolver
  2. StandardServletMultipartResolver

CommonsMultipartResolver使用commons Fileupload来处理multipart请求,所以在使用时,必须要引入相应的jar包;
StandardServletMultipartResolver是基于Servlet3.0来处理multipart请求的,所以不需要引用其他jar包,但是必须使用支持Servlet3.0的容器才可以。
以tomcat为例,从Tomcat 7.0.x的版本开始就支持Servlet3.0了。
如何确定哪个版本的Tomcat支持servlet3.0可以看这里

Spring的配置

在配置文件fileUpload-servlet.xml中设置bean,bean的id必须是multipartResolver

这里并没有对上传文件的大小等参数进行配置,因为相应的配置都移到了web.xml中。

<bean id="multipartResolver"
    class="org.springframework.web.multipart.support.StandardServletMultipartResolver">
</bean>

web.xml的配置

  1. 要注意xml中web-app节点使用的版本,必须是3.0+
  2. 要注意servlet节点下的multipart-config节点的配置。区别与使用CommonsMultipartResolver进行文件上传时配置的不同。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    id="WebApp_ID" version="3.0">

    ····
    <servlet>
        <servlet-name>fileUpload</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>  
            <param-name>contextConfigLocation</param-name>  
            <param-value>classpath:fileUpload-servlet.xml</param-value>  
        </init-param>  
        <load-on-startup>0</load-on-startup>
        <multipart-config>
            <!--临时文件的目录-->
            <location>d:/</location>
            <!-- 上传文件最大2M -->
            <max-file-size>2097152</max-file-size>
            <!-- 上传文件整个请求不超过4M -->
            <max-request-size>4194304</max-request-size>
        </multipart-config>
    </servlet>
    ....
</web-app>

Controller设置

两种上传方法,大同小异。

@Controller
@RequestMapping(value = "/file2")
public class FileController2 {

    /**
     * 在方法签名中使用MulitpartHttpServletRequest类型。
     * 
     * @param request
     * @return
     */
    @RequestMapping(value = "/commUploadB")
    @ResponseBody
    public JSONObject commUploadB(MultipartHttpServletRequest request) {
        JSONObject json = new JSONObject();
        json.put("succ", false);
        try {
            MultipartFile file = request.getFile("uploadFileB");// 与页面input的name相同
            File imageFile = new File("d:/upload2.jpg");// 上传后的文件保存目录及名字
            file.transferTo(imageFile);// 将上传文件保存到相应位置
            json.put("succ", true);
            return json;
        } catch (Exception e) {
            e.printStackTrace();
            return json;
        }
    }

    /**
     * 在方法签名中使用MultipartFile类型,并使用@RequestPart注解。
     * 
     * @param uploadFileC
     * @return
     */
    @RequestMapping(value = "/commUploadC")
    @ResponseBody
    public JSONObject commUploadC(@RequestPart("uploadFileC") MultipartFile uploadFileC) {
        JSONObject json = new JSONObject();
        json.put("succ", false);
        try {
            File imageFile = new File("d:/upload3.jpg");// 上传后的文件保存目录及名字
            uploadFileC.transferTo(imageFile);// 将上传文件保存到相应位置
            json.put("succ", true);
            return json;
        } catch (Exception e) {
            e.printStackTrace();
            return json;
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值