1 概述

  • SpringMVC为文件上传提供了直接的支持,这种支持是通过即插即用的MultipartResolver实现的。Spring用Jakarta Commons Fileupload技术实现一个MultipartResolver实现类:CommonsMultipartResover。
  • SpringMVC上下文中默认没有装配MultipartResovler,因此默认情况下不能处理文件的上传工作,如果想要使用Spring的文件上传功能,需要在上下文中配置MultipartResolver。

2 入门示例

2.1 导入FileUpload对应的jar包的maven坐标

<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.2</version>
</dependency>

2.2 在SpringMVC中配置CommonsMultipartResolver

  • SpringMVC.xml
<!-- 配置CommonsMultipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="defaultEncoding" value="UTF-8"/>
    <property name="maxUploadSize" value="5242880"/>
</bean>

2.3 应用示例

  • 示例:
  • index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<form action="${pageContext.request.contextPath}/upload" method="post" enctype="multipart/form-data">
    姓名:<input type="text" name="username" value=""/><br/>
    上传文件:<input type="file" name="file"/><br/>
    <input type="submit" value="提交"/>
</form>

</body>
</html>
  • UserController.java
package com.sunxiaping.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;

@Controller
public class UserController {

    @RequestMapping(value = "/upload")
    public String upload(String username, MultipartFile file, HttpServletRequest request) throws IOException {
        System.out.println("username:" + username);

        System.out.println("file:" + file);

        String originalFilename = file.getOriginalFilename();
        System.out.println("文件原来的名称:" + originalFilename);

        String path = request.getRealPath("/upload/" + originalFilename);

        File destfile = new File(path);
        if (destfile.exists()) {
            destfile.getParentFile().mkdirs();
        }

        file.transferTo(destfile);

        return "success";
    }

}
  • SpringMVC.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.0.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.0.xsd ">

    <!-- 配置自动扫描的包 -->
    <context:component-scan base-package="com.sunxiaping.springmvc"></context:component-scan>

    <!-- 配置视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

<!-- 配置CommonsMultipartResolver -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <property name="defaultEncoding" value="UTF-8"/>
    <property name="maxUploadSize" value="5242880"/>
</bean>


    <mvc:annotation-driven ></mvc:annotation-driven>

</beans>
  • success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
成功啦 <br/>

</body>
</html>
01-09 04:21
查看更多