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&currentPage=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&currentPage=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同名!!!

经验分享 程序员 微信小程序 职场和发展