Web开发中图片上传功能总结
图片上传功能总结
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同名!!!
上一篇:
IDEA上Java项目控制台中文乱码