前端上传文件,在Controller获取源文件名称与类型,对其进行修改,重建名字保存在数据库中。
需要时作为实体类对象的一个属性传递给前端。
静态原型:
<input type="file" name="?">
//表单文件上传需要确定enctype的属性和method属性
<form enctype="multipart/form-date" method="post">
- 文件重命名:对文件的重命名。使用UUID
- 获取文件的真实名称
- 获取URL地址映射的真实路径,动态获取img目录的物理路径
- 编写工具类FileUtil
public class FileUtil {
/*
* @Description: TODO
* @Param: 无
* @Return: 重命名的文件
* @Throws
**/
public static String ReFileName(){
return UUID.randomUUID().toString().replace("-","");
}
/*
* @Description: 获取文件格式
* @Param: 文件名字
* @Return: 文件格式
* @Throws
**/
public static String RealFileName(String realName){
return realName.substring(realName.lastIndexOf("."));
}
}
使用Part对象接受文件上传
- 需要servlet3.1并且tomcat8
- 在类上加
@MultipartConfig
注解
Collection<Part> parts = request.getParts();
//图片上传
Part part = request.getPart("workerImage");
//获取文件真实名称
String realFileName = part.getSubmittedFileName();
System.out.println("文件真实名称"+realFileName);
//获取随机名称
String saveFileName = FileUtil.ReFileName();
System.out.println("保存文件名称"+saveFileName);
//获取文件后缀
String saveTypeName = FileUtil.RealFileName(realFileName);
System.out.println("保存后缀名称"+saveTypeName);
//获取修改后的文件名称
String workerImg = saveFileName+saveTypeName;
System.out.println("保存图片名称"+workerImg);
//获取URL对应的物理路径
String realPath = request.getServletContext().getRealPath("/images/");
System.out.println("保存物理路径"+realPath);
//调用方法实现另存
part.write(realPath+workerImg);
System.out.println("Controller"+worker);
worker.setWorkerImage(workerImg);