1.我们需要使用Apache Commons FileUpload组件,故在工程中应导入commons-io-2.0.1.jar commons-fileupload-1.2.2.jar两个jar文件(可在Appache官网下载)
2.配置MultiparResolver
首先使用CommonsMultipartResolver配置一个MultiparResolver解析器,配置到相应的springmvc.xml文件下:
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="50000000"/>
<property name="defaultEncoding" value="utf-8"/>
</bean>
注: defaultEncoding:请求的编码格式,默认为ISO-8859-1,此处设置为UTF-8
maxUploadSize:上传文件大小的限制,单位为字节。
3.编写前台页面 addFile.xml:
<form action="addFile.do" method="post" enctype="multipart/form-data">
文件:<input type="file" name="multipartFile"/>
<input type="submit" value="保存"/>
</form>
4.准备接收文件:注:红箭头标注的那块必须与上面表单的action相同。
5.编写文件上传后的后台代码:
/跳转addFile页面
@RequestMapping(value = "/addFile.do",method = RequestMethod.GET)
public String addFile(){
return "addFile";
}
//处理文件上传的方法
@RequestMapping(value = "/addFile.do",method = RequestMethod.POST)
public String addFile(HttpServletRequest request, @RequestParam(value="multipartFile",required = false) MultipartFile multipartFile, Model model){
if (!multipartFile.isEmpty()){
//获取文件上传的目标路径
String url= request.getServletContext().getRealPath("upload");
System.out.println(url);
//获取文件名
String fileName= multipartFile.getOriginalFilename();
//获取文件后缀
String extentionName= fileName.substring(fileName.lastIndexOf(".")+1);
//获取文件大小
long size= multipartFile.getSize();
long initalSize=50000000;
if (size<initalSize){
if (extentionName.equalsIgnoreCase("jpg") || extentionName.equalsIgnoreCase("png")){
//可以上传文件
//重命名文件名
Date date = new Date();
SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMddhhmmss");
//当前系统时间的字符串
String now=sdf.format(date);
//将时间字符串与文件名拼接在一起
String name=now+fileName;
File file= new File(url+File.separator+name);
try {
multipartFile.transferTo(file);//上传成功
return "welcome";
} catch (IOException e) {
e.printStackTrace();
model.addAttribute("mess","上传失败");
return "addFile";
}
}else {
//文件后缀不符合
model.addAttribute("mess","文件后缀只能是.jpg/.png");
return "addFile";
}
}else {
//大小超出范围
model.addAttribute("mess","大小超出范围");
return "addFile";
}
}else {
//如果文件为空
model.addAttribute("mess","文件为空");
return "addFile";
}
}
注:上面所返回的 都是已经存在页面。
6.准备存放上传文件的目录,注意和上面代码中的路径保持一致
注意:空的目录idea不会更新到服务器(这应该是个bug),所以可以在里面随便放个文件,哪怕再删掉也行,迫使idea更新.