图片上传功能总结
1、添加文件上传所需jar包(commons-io-1.4.jar和commons-fileupload-1.1.1.jar)
2、在form表单上添加自带属性 enctype="multipart/form-data"
<form action="${pageContext.request.contextPath }/emp.do?method=add"
method="post" enctype="multipart/form-data">
3、在Spring配置文件中配置文件上传的工具对象
<!-- 配置文件上传过滤器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"></bean>
4、在实体类中添加一个文件接收对象MultipartFile
5、控制器处理文件名等
5.1上传文件时的操作
// 添加
@RequestMapping(params = "method=add")
public String add(EmpEntity emp, HttpServletRequest request) {
try {
// 获取项目发布时的实际路径
String path = request.getSession().getServletContext().getRealPath("/");
// 获取服务器储存文件的路径
String web_path = path.substring(0, path.lastIndexOf("\\", path.lastIndexOf("\\") - 1) + 1);
// 获取文件名
String oldname = emp.getMyimg().getOriginalFilename();
// 改名后
String newname = changeStr(oldname);
// 上传图片
File file = new File(web_path + "\\upload_img", newname);
emp.getMyimg().transferTo(file);
// 修改数据库
emp.setEimg(newname);
this.empService.addEmp(emp);
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
}
return "redirect:/emp.do?method=all¤tPage=1&pageSize=10";
}
}
5.2 修改文件时操作处理
// 修改
@RequestMapping(params = "method=upp")
public String updateEmp(EmpEntity emp, HttpServletRequest request) {
if (emp.getMyimg().getOriginalFilename().length() == 0) {
// 获取未修改的图片文件名
EmpEntity e = this.empService.findOne(emp.getEid());
emp.setEimg(e.getEimg());
// 提交数据库
this.empService.updateEmp(emp);
} else {
try {
// 修改相片
// 删除旧内容
String path = request.getSession().getServletContext().getRealPath("/");
String web_path = path.substring(0, path.lastIndexOf("\\", path.lastIndexOf("\\") - 1) + 1);
EmpEntity oldEmp = this.empService.findOne(emp.getEid());
String delFileName = oldEmp.getEimg(); // 得到旧照片名
File file = new File(web_path, delFileName);
file.delete();
// 上传新内容
// 获取文件名
String oldname = emp.getMyimg().getOriginalFilename();
// 改名后
String newname = changeStr(oldname);
// 上传图片
File f = new File(web_path + "\\upload_img", newname);
emp.getMyimg().transferTo(f);
// 修改数据库
emp.setEimg(newname);
this.empService.updateEmp(emp);
} catch (IllegalStateException | IOException e) {
e.printStackTrace();
}
}
return "redirect:/emp.do?method=all¤tPage=1&pageSize=10";
}
5.3 处理文件名的方法
// 生成图片文件名
private String changeStr(String oldname) {
// 文件名
String filename = oldname.substring(0, oldname.lastIndexOf("."));
// 文件后缀名
String lastName = oldname.substring(oldname.lastIndexOf("."));
Date date = new Date();
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String name = filename + "_" + sdf.format(date) + lastName;
return name;
}
注意: 上传文件时input中的name必须和实体类中MultipartFile同名!!!
版权声明:本文为qq_33399435原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。