1 简介
- Spring MVC 为文件上传提供了直接的支持,通过MultipartResolver 接口实现。
- Spring MVC 上下文中默认没有装配 MultipartResovler,因此默认情况下不能处理文件的上传工作,如果想使用 SpringMVC 的文件上传功能,需要在上下文中配置 MultipartResolver。
- Jakarta Commons FileUpload 技术实现了一个 MultipartResolver接口, 实现类是:CommonsMultipartResolver
2 上传步骤
1 导入jar包
2) 在SpringMVC的配置文件中配置CommonsMultipartResolver解析器
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--设置字符集-->
<property name="defaultEncoding" value="utf-8"></property>
<!--设置总文件的大小-->
<property name="maxUploadSize" value="102400"></property>
</bean>
3) 表单页面
a) enctype属性值设置为multipart/form-data
b) 上传文件的表单项的type设置为file
<h1>文件上传</h1>
<form action="${pageContext.request.contextPath}/testFileUpload" method="post" enctype="multipart/form-data">
描述:<input type="text" name="desc"><br>
文件:<input type="file" name="filename"><br>
<input type="submit">
</form>
4) 处理器方法
@RequestMapping("/testFileUpload")
public String testFileUpload(@RequestParam("desc") String desc ,
@RequestParam("filename")MultipartFile file,HttpSession session) throws IOException {
System.out.println("文件的描述信息是:"+desc);
//获取文件名
String fileName = file.getOriginalFilename();
//获取文件的类型
String contentType = file.getContentType();
//获取文件的大小
long size = file.getSize();
System.out.println("文件名是:"+fileName);
System.out.println("文件的类型是:"+contentType);
System.out.println("文件的大小是:"+size+" 个字节");
//获取文件上传的真实路径
ServletContext servletContext = session.getServletContext();
String realPath = servletContext.getRealPath("/upload");//自己上传保存的路径
//创建路径
File upload = new File(realPath);
if(!upload.exists()){
upload.mkdirs();
}
//上传文件
file.transferTo(new File(realPath+"/"+fileName));
return "success";
}