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同名!!!


版权声明:本文为qq_33399435原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。