前言
这里讲解SpringMvc如何上传文件 ,较详细,一步一步分析。
一、准备工作
1.在前端写一个form表单,用于上传并提交文件
//该文件为index.html
<form th:action="@{/upfile}" method="post" enctype="multipart/form-data">
上传文件<input type="file" name="file">
<input type="submit"value="上传">
</form>
①.这里method 必须为post 且必须要有enctype="multipart/form-data"将文件转化为二进制形式
②.input的 type属性值为file 表示上传文件
③.th:action="@{/upfile}" 表示上传到的路径为 :项目名/upfile
2.后端控制层
@PostMapping("/upfile")
public String upfile(MultipartFile file, HttpSession session) throws IOException {
System.out.println(file);
return "index"// 回到index.html页面, index为逻辑视图
}
这里获取文件用的MultipartFile类型
二、正式开始(从后端获取到客户端上传的文件)
此时运行项目,并上传一个文件,查看IDEA运行界面
发现其file为null,并未获取到客户端传过来的文件。(前端input name = 'file' 这里 参数名也为file 表明参数对应关系是正确的)
原因:①需要在pom.xml添加依赖:
<!--文件上传-->
<dependency>
<groupId>commons-fileupload</groupId>
<artifactId>commons-fileupload</artifactId>
<version>1.3.1</version>
</dependency>
②在SpringMvc 配置文件配置文件上传器 id必须设置为multipartResolver
<!-- 配置文件上传解析器-->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
此时运行并上传一个文件(如图片)后,查看IDEA界面,发现file能获取到文件。
三、将获取到的文件上传到指定位置
@PostMapping("/upfile")
public String upfile(MultipartFile file, HttpSession session) throws IOException {
// 查看是否获取到文件
System.out.println(file);
// 用session来获取应用域
ServletContext servletContext = session.getServletContext();
// 通过应用域 获取的是target/项目名的真实路径
String reath = servletContext.getRealPath("static/img");
// 获取上传的文件的文件名
String filename = file.getOriginalFilename();
// 创建目录
File fileDir = new File(reath);
if (!fileDir.exists()){//判断目录是否存在,不存在就创建
fileDir.mkdir();
}
// 设置上传文件真实保存路径
String finalPath = reath + File.separator +filename;
// 用 '文件保存的路径' 创建的一个文件
File file_ = new File(finalPath)
// transferTO 将文件转移,将左边的文件内容转移到右边的文件里
file.transferTo(file_);
return "index";//返回到 index.html页面
}
① servletContext.getRealPath("static/img");
servletContext.getRealPath(“”) ; 返回的是当前项目所运行的traget包里的项目在本地的路径:如: d:\xxx\xxx\项目名\target\项目名
servletContext.getRealPath("static/img"); 返回 d:\xxx\xxx\项目名\target\项目名\static\img
② File.separator 是文件分隔符 ,便于适配不同的系统
③其余解释都在代码里
四.运行查看结果
1.先点开target包下,所准备好要上传到的具体路径
2、运行代码, 在IDEA查看运行代码和图片上传位置
上传成功!
总结
在SpringMvc中上传文件的准备工作和重点注意细节:
1.加入对应依赖 2.在SpringMvc配置文件中配置文件上传器(bean的id为multipartResolver)
3.后端接收的文件类型为MultipartFile
4.前端form method为post 且需要加上enctype="multipart/form-data"