一.步骤总结
1.导包
2.准备前端表单
3.在web.xml中配置文件解析器
4.准备接收文件和保存文件的方法
二.步骤解析:
1.导包
除了Spring和SpringMVC中的需要的包外,还需要commons-fileupload.jar以及commons-io.jar包
2.准备前端表单
前端表单要求:为了能上传文件,必须将表单的method设置为POST,并将enctype设置为multipart/form-data。只有在这样的情况下,浏览器才会把用户选择的文件以二进制数据发送给服务器;
注意:
1)表单必须是post方法提交
2)表单域中的type必须是file
3)enctype的值要是multipart/form-data
<form action="${pageContext.request.contextPath}/upload.do" method="post" enctype="multipart/form-data">
name:<input type="text" name="name"><br>
头像:<input type="file" name="img"><br>
<input type="submit" value="提交">
</form>
3.在springmvx.xml中配置文件解析器
注意:
id必须是multipartResolver,因为系统要根据这个是去创建文件解析器
文件解析器不像其他的比如处理器,适配器系统会自动配,文件上传解析器不是必要的,只有在文件上传的才用到,所以开发者在使用时候自己配置出来
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!--配置文件大小-->
<property name="maxUploadSize" value="#{1024*1024*1}"/><!--1兆-->
</bean>
4.准备接收文件和保存文件的方法
1)文件的接收
方法参数类型使用MultipartFile,参数名称同表单中的name值一致
public String upload(MultipartFile img, String name, Model m)
2)文件的保存
步骤:
a.用UUID或者时间戳生成文件的名称(为的是防止多名用户上传同名的文件,导致文件覆盖丢失的问题)
b.用工具类生成文件的后缀名
c.拼接文件的名称
d.保存上传的文件
//将上传的文件保存到服务器电脑的指定磁盘即可
File file=new File("c:/upload");
if(!file.exists()){
file.mkdir();
}
//文件的名称用uuid生成
String fileName = UUID.randomUUID().toString().replaceAll("-", "");
//或者用时间戳
// long time = new Date().getTime();
//文件的后缀名用工具类
String extension = FilenameUtils.getExtension(img.getOriginalFilename());
//生成新的文件名称
String newFileName=fileName+"."+extension;
File dest=new File(file,newFileName);
//保存上传的文件
try {
img.transferTo(dest);
} catch (Exception e) {
e.printStackTrace();
}