第一步:导入依赖包
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<version>1.0</version>
<artifactId>SpringMVCDemo</artifactId>
<packaging>war</packaging>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.4.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.25</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.0</version>
<scope> compile </scope>
</dependency>
<!-- <dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>compile</scope>
</dependency>-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.2.6</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.7.25</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>2.11.1</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.11.1</version>
</dependency>
<!--springMVC实现文件上传的依赖包-->
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.2.2</version>
</dependency>
<!--导入JSTL标签库(多文件上传)-->
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
</dependency>
<dependency>
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
</dependency>
</dependencies>
<build>
<finalName>SpringMVCDemo</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
</project>
第二步:配置MultipartResolver
web.xml
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<!--告诉它spring配置文件在哪里-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>
<!-- 这个比较关键:通过Listener来加载IOC容器上下文,就是一个桥梁 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--Listener:这是创建父子容器最关键的一步,
contextConfigLocation配置只是告诉让listener去哪里找这个配置文件,
而listener会把这个扫描的文件做为父容器,在spring底层有一个方法,
把spring-context容器设置为spring-mvc容器的父容器,具体哪个方法我忘了,有兴趣的可以问度娘。
-->
<!-- dispatcherServlet:
是所有请求的分配者,其中主要的方法为doDispatch主要把前端来的请求,
或其他方法的结果调度给不同的方法。-->
<servlet>
<!--配置核心控制器-->
<servlet-name>quickstart</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
<!--servlet初始化的时候,加载IOC容器,如果不想配置,
他会默认去WEB-INF下面去找
(servlet-name)-servlet.xml
dispatcher-servlet.xml
在创建servlet的时候加载springMVC的配置文件-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>quickstart</servlet-name>
<!-- /不会匹配到.jsp, /*会匹配到.jsp -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
第三步:编写文件上传表单页面
在pages下创建fileUpdate.jsp(注意此页面在webapp下的WEB-INF下的pages文件夹下)
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>上传资源</title>
</head>
<body>
<%--enctype属性:指定数据的编码格式,该属性有三个值
multipart/form-data:该编码方式以二进制流的方式来处理表单数据
并将文件或指定文件的内容封装到请求的参数中--%>
<form action="/oneFileUpload" method="post" enctype="multipart/form-data">
选择文件:<input type="file" name="myFile" /><br>
<hr>
文件描述:<input type="text" name="description" /><br>
<hr>
<input type="submit" value="提交">
</form>
</body>
</html>
第四步:创建pojo类
FileDomain类
@Data
public class FileDomain {
private String description;
private MultipartFile myFile;
}
第五步:创建控制器
FileUploadController类
@Controller
public class FileUploadController {
//在打印日志信息时
private static final Log logger= LogFactory.getLog(FileUploadController.class);
/*显示文件上传页面*/
@RequestMapping("/getFileUpdate")
public String getFileUpdate(){
return "fileUpdate";
}
/*实现单文件上传*/
@RequestMapping("/oneFileUpload")
public String oneFileUpload(@ModelAttribute FileDomain fileDomain,HttpServletRequest request){
/*指定文件上的路径
* 本地服务器的webapps下的项目名称的目录下*/
String realPath = request.getServletContext().getRealPath("uploadfiles");
//获取文件上传的名称
String fileName = fileDomain.getMyFile().getOriginalFilename();
//获取UUID的值
String uuid = UUID.randomUUID().toString().replace("-", "");
//设置保存上传文件的名称
fileName=uuid+"_"+fileName;
//判断保存路径是否存在
File targetFile=new File(realPath,fileName);
if(!targetFile.exists()){
//若路径不存在,就创建
targetFile.mkdirs();
}
//开始上传
try{
fileDomain.getMyFile().transferTo(targetFile);
logger.info("文件上传成功");
}catch (Exception e){
e.printStackTrace();
}
return "showFile";
}
第六步:创建上传成功显示页面(注意此页面在webapp下的WEB-INF下的pages文件夹下)
showFiles.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>显示文件</title>
</head>
<body>
文件描述:${fileDomain.description}
<hr>
文件名称:${fileDomain.myFile.originalFilename}
</body>
</html>
完成后:
此路径为controller层定义的上传页面路径(注意端口,若为80,则如下,否则localhost后面要加端口号)
提交后如下图![](https://i-blog.csdnimg.cn/blog_migrate/be80c0058de25f3a8c8df8df6ca8660b.png)
是你部署上去的tomcat(注意路径)