springMVC文件上传
1、利用Maven自动导入jar包
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.3</version>
</dependency>
<dependency>
<groupId>commons-io</groupId>
<artifactId>commons-io</artifactId>
<version>2.5</version>
</dependency>
没有使用
Maven
的小伙伴只能自己手动导入了。
2、前端 html 编写
index.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<form th:action="@{/upload}" method="post" enctype="multipart/form-data">
<input name="file" type="file"><br>
<input type="submit" value="提交">
</form>
</body>
</html>
注意:form
表单的enctype
一定要设为 multipart/form-data
multipart/form-data
表示提交的数据以多段(每一个表单项一个数据段)的形式进行拼接,然后以二进制流的形式发送给服务器。可以在网页的请求体查看(审查元素)这些数据。
success.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>success</h1>
</body>
</html>
3、编写 java 实现
@Controller
public class FileController {
@RequestMapping("upload")
public String upload(MultipartFile file,HttpSession session) throws IOException {
// 获取上传文件的文件名
String filename = file.getOriginalFilename();
// 处理文件重名问题
String suffix = filename.substring(filename.lastIndexOf("."));
// 用通用唯一识别码
filename = UUID.randomUUID().toString() + suffix;
// 获取服务器中文件存储目录的路径
ServletContext context = session.getServletContext();
String filedir = context.getRealPath("file");
File f = new File(filedir);
// 目录不存在则创建
if (!f.exists()) {
f.mkdir();
}
// 最终文件存储位置
String finalpath = filedir + File.separator + filename;
// 文件上传
file.transferTo(new File(finalpath));
return "success";
}
}
4、配置文件 springMVC.xml
IOC容器自动获取该该对象,且必须以 id (即 byName)的形式获取
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"/>