Spring MVC为文件上传提供了直接的支持,这种支持是通过即插即用的MultipartResolver接口实现。MultipartResolver用于处理上传请求,将上传请求包装成可以直接获取文件的数据,从而方便操作,它有两个实现类:StandardServletMultipartResolver和CommonsMultipartResolver,下面介绍CommonsMultipartResolver来完成文件上传的具体步骤:
系统的整体架构图:
![](https://img.haomeiwen.com/i23407928/c2c1e69c7e8231b2.png)
1、添加相应的jar包
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.4</version>
</dependency>
2、在spring.xml中配置MultipartResolver
<mvc:annotation-driven/>
<!--加载静态文件-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>
<!--上传文件配置 对象名必须是multipartResolver-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="UTF-8"></property>
<property name="maxUploadSize" value="5000000"></property>
</bean>
♦defaultEncoding:请求的编码格式,默认为ISO-8859-1,此处设置为UTF-8(注:defaultEncoding必须和JSP的pageEncoding设置一致,以便正确的读取表单的内容)
♦maxUploadSize:上传文件大小上限,单位为字符。
3、index.jsp和success.jsp
enctype="multipart/form-data"必须添加
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>上传文件</h2>
<form action="/upload" method="post" enctype="multipart/form-data">
<input type="file" name="photo"/>
<input type="submit" name="上传">
</form>
</body>
</html>
<%--
Created by IntelliJ IDEA.
User: Mr Wei
Date: 2020/*/*
Time: 15:53
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" isELIgnored="false" language="java" %>
<html>
<head>
<title>上传成功页面</title>
</head>
<body>
<img src="/uploadFile/${fname}" width="200px" height="150px">
</body>
</html>
4、controller类
该网址https://blog.csdn.net/cliche_tune/article/details/102901241解释为什么传入的是文件而不是文件夹new File(path+"/"+photo.getOriginalFilename())
package com.fan.controller;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
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 Controller1 {
@RequestMapping("/upload")
public String saveFile(MultipartFile photo, HttpServletRequest request, ModelMap map) {
//将文件上传到uploadFile目录下
//转化服务器地址
String path=request.getRealPath("/uploadFile");
//photo.getOriginalFilename()得到文件名称
if(!photo.isEmpty()){
try {
photo.transferTo(new File(path+"/"+photo.getOriginalFilename()));
} catch (IOException e) {
e.printStackTrace();
}
}
map.addAttribute("fname",photo.getOriginalFilename());
return "success";
}
}
网友评论