1. 工程简介

1.1  工程目录

工程目录如下图所示,可参考创建springMVC的入门工程(SpringMVC入门实例,点击前往),本工程实现一个上传图片的功能,其他文件也可以上传,不过无法在页面展示。

                 

SpringMVC 上传文件完整实例(IntelliJ IDEA)_MVC

1.2  下载上传文件所需的 jar 包

可以点击这个链接下载所需jar包:https://pan.baidu.com/s/1uooC6gMUxFdgjsKyQRaCpA  提取码:ffgx,也可已自行下载如下三个jar包 。

  • commons-fileupload-1.3.3.jar
  • commons-io-2.6.jar
  • jstl-1.2.jar

1.3  创建一个存储 “上传文件” 的文件夹

新建一个 upload 的文件夹,如果你想更换这个名字,也要修改 java 源文件。

SpringMVC 上传文件完整实例(IntelliJ IDEA)_xml_02

2.  源文件编写

2.1  java源文件编写

2.1.1 UploadImageController.java:

存储路径 !!! 根据自己的情况填写,我的如下:

String filePath = "F:\\IDEAworkspace\\springmvc03\\out\\artifacts\\springmvc03_war_exploded\\upload\\";

存储路径可以这样快速得到:

SpringMVC 上传文件完整实例(IntelliJ IDEA)_xml_03

源代码如下:

package com.study.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 javax.servlet.http.HttpServletResponse;
import java.io.File;

@Controller
public class UploadImageController {
    @RequestMapping(value = "/uploadImg")
    public void uploadImg(HttpServletRequest request, HttpServletResponse response, MultipartFile file) throws Exception {
        // 上传图片 的 原名称
        String oldName = file.getOriginalFilename();
        String newName = null;

        System.out.println(oldName);

        // 存储路径 !!! 根据自己的情况
        String filePath = "F:\\IDEA workspace\\springmvc03\\out\\artifacts\\springmvc03_war_exploded\\upload\\";
        // 访问地址
        String visitPath = "http://localhost:8080/upload/";

        // 上传图片
        if(file!=null && oldName!=null && oldName.length()>0) {

            // 图片的新名字为 newImage + 原名字的后缀(如 .jpg, .png), 可以使用 UUID 为其生成唯一的名字
            newName = "newImage" + oldName.substring(oldName.lastIndexOf("."));
            System.out.println(filePath+newName);
            File newFile = new File(filePath+newName);
            file.transferTo(newFile);
        }
        // 回显刚才上传的 访问地址 + 图片名称
        request.setAttribute("image", visitPath+newName);
        request.getRequestDispatcher("index.jsp").forward(request, response);
    }
}

2.1.2 UserModel.java:

package com.study.springmvc.model;

public class UserModel {
    private String userName;
    private int userAge;

    @Override
    public String toString() {
        return "UserModel{" +
                "userName='" + userName + '\'' +
                ", userAge=" + userAge +
                '}';
    }

    public String getUserName() {
        return userName;
    }

    public void setUserName(String userName) {
        this.userName = userName;
    }

    public int getUserAge() {
        return userAge;
    }

    public void setUserAge(int userAge) {
        this.userAge = userAge;
    }
}

2.1.3 Constant.java

package com.study.springmvc;

public class Constant {
    // empty
}

2.2  xml 文件配置

2.2.1 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
  </context-param>
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!-- post 乱码过滤器 -->
  <filter>
    <filter-name>CharacterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>Encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <!-- post 乱码过滤器指定范围,过滤所有 -->
  <filter-mapping>
    <filter-name>CharacterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

  <!-- SpringMVC 的前端控制器 -->
  <servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <!-- 拦截了以 ".form" 结尾的URL请求,Web 应用接收到该类请求之后 , 会调用前端控制器-->
  <servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>*.form</url-pattern>
  </servlet-mapping>

  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>

</web-app>

2.2.2 dispatcher-servlet.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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">

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

  <!-- 扫描配置 -->
  <context:component-scan base-package="com.study.springmvc.controller"/>

  <mvc:annotation-driven/>

  <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 上传文件大小的限制,单位为字节,如下:10000000 字节 -->
    <property name="maxUploadSize">
      <value>10000000</value>
    </property>
    <!-- 请求的编码格式 -->
    <property name="defaultEncoding">
      <value>utf-8</value>
    </property>
  </bean>

</beans>

2.2.3 applicationContext.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

  <!-- empty -->
</beans>

2.3  视图编写

2.3.1 index.jsp:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>上传文件实例</title>
</head>
<body>

<form action="${pageContext.request.contextPath}/uploadImg.form" method="post" enctype="multipart/form-data">
    <input type="file" name="file"/>
    <input type="submit" name="上传">
</form>

<c:if test="${image != null}">
    <h1>照片展示${image}</h1>
    <img src="${image}" />
</c:if>
</body>
</html>

3.  工程测试

3.1 启动 tomcat,如下图所示。

SpringMVC 上传文件完整实例(IntelliJ IDEA)_xml_04

3.2 点击选择文件,选择一个文件。

SpringMVC 上传文件完整实例(IntelliJ IDEA)_xml_05

3.3 点击提交,如图所示。

SpringMVC 上传文件完整实例(IntelliJ IDEA)_xml_06

其他类型文件也可以上传,如下上传了一个 c 源文件,但是页面展示会出错。

SpringMVC 上传文件完整实例(IntelliJ IDEA)_spring_07

END。