文件上传,使用transferTo创建一个新的文件保存上传的源文件。包括生成一个唯一的文件名称,防止上传文件出现文件名称相同,出现文件覆盖问题。
java
//处理用户的注册请求方法,包括文件上传
@PostMapping("/upload")
@ResponseBody
public String upload(@RequestParam(value = "name") String name,
@RequestParam(value = "email") String email,
@RequestParam(value = "age") Integer age,
@RequestParam(value = "job") String job,
@RequestParam(value = "header") MultipartFile header,
@RequestParam(value = "photos") MultipartFile[] photos) throws IOException {
//获取到上传文件的信息
log.info("上传的信息:name={} email={} age={} job={} header={} photos={} ",name,email,age,job,header,photos);
//将上传文件保存到指定的位置。
//动态创建图片保存的位置+
//1、获取上传文件的路径
String path = ResourceUtils.getURL("classpath:").getPath();
//2、指定要上传的目录
File file = new File(path + WebUtils.getUploadFileDirectory());
//3、判断目录是否存在
if (!file.exists()) {
//如果不存在就进行创建
file.mkdirs();
}
//1、判断上传的文件是否为空
if(!header.isEmpty()){
//2、获取上传文件的原文件名称
String originalFilename = header.getOriginalFilename();
//解决文件上传,名称重复问题
String Filename = UUID.randomUUID().toString() + "_" + System.currentTimeMillis() + originalFilename;
//3、将文件放到指定位置
//header.transferTo(new File("path/" + originalFilename));
header.transferTo(new File(file.getAbsolutePath() + "/" + Filename));
}
//1、处理宠物图片,判断上传的图片是否大于一张
if(photos.length>0){
//2、对上传的多张图片进行遍历
for (MultipartFile photo : photos) {
//3、判断这张图片是否为空
if (!photo.isEmpty()) {
String originalFilename = photo.getOriginalFilename();
String Filename = UUID.randomUUID().toString() + "_" + System.currentTimeMillis() + originalFilename;
//photo.transferTo(new File("path\" + originalFilename));
photo.transferTo(new File(file.getAbsolutePath() + "/" + Filename));
}
}
}
return "success";
}
编写一个工具类,用于生成基于当前年月日的上传目录。
java
public class WebUtils {
//定义一个上传文件的路径
public static String UPLOAD_FILE_DIRECTORY = "static/images/upload/";
//编写方法,生成一个目录,根据当前的年/月/日
public static String getUploadFileDirectory() {
return UPLOAD_FILE_DIRECTORY + new SimpleDateFormat("yyyy/MM/dd").format(new Date());
}
}