log.info("修改头像");
// 1 、检查文件是否为空
if (avatarFile.isEmpty()) {
return ResponseEntity.badRequest().body("上传的文件不能为空");
}
// 2、根据用户ID等信息生成唯一路径
//2.1读出文件名
String originalFilename = avatarFile.getOriginalFilename();
//2.2截取扩展名
originalFilename = originalFilename.substring(originalFilename.lastIndexOf(".") + 1);
//2.3获得当前时间戳 保证生成唯一文件名
long timestamp = Instant.now().toEpochMilli();
String timestampStr = Long.toString(timestamp);
String activeProfile = environment.getActiveProfiles()[0];
//2.4 获得用户 id 把用户id作为路径中的一环
ApUser user = ThreadLocalUtil.getUser();
Integer id = user.getId();
//2.5 根据不同环境 存放不同路径
String filePath= "";
if ("dev".equals(activeProfile)){
//开发环境
filePath = "/Users/zhouchenghuan/Downloads/users_avatars/" + id + "/" +timestampStr +"." + originalFilename;
}else if ("pro".equals(activeProfile)){
//生产环境
filePath = "/var/app_data/users_avatars/" + id + "/" +timestampStr + "." + originalFilename;
}
Path destination = Paths.get(filePath);
String previewUrl = "";
// 保存文件
try {
Files.createDirectories(destination.getParent()); // 如果父目录不存在,则创建
avatarFile.transferTo(destination);
FileInputStream fileInputStream = new FileInputStream(filePath);
MinioClient minioClient = MinioClient.builder().credentials("账户", "密码")
.endpoint("http://你的服务器").build();
//3.2上传
//用户id + 时间戳 + 文件扩展名
String objectName = id + timestampStr + "." + originalFilename;
PutObjectArgs putObjectArgs = PutObjectArgs.builder()
.object(objectName)//文件名
.contentType("text/html/png/jpg")//文件类型
.bucket("image")//桶名词 与minio创建的名词一致
.stream(fileInputStream, fileInputStream.available(), -1) //文件流
.build();
minioClient.putObject(putObjectArgs);
// 获取文件的下载地址
String downloadUrl = minioClient.getObjectUrl("image", objectName);
System.out.println("下载地址: " + downloadUrl);
//图片预览地址
previewUrl = minioClient.presignedGetObject("image", objectName);
System.out.println("预览地址: " + previewUrl);
// 删除临时文件
// 判断文件是否存在
if(Files.exists(Paths.get(filePath))) {
try {
// 删除文件
Files.delete(Paths.get(filePath));
System.out.println("临时文件删除成功");
} catch (Exception e) {
// 异常处理
e.printStackTrace();
}
} else {
System.out.println("临时文件不存在");
}
} catch (Exception e) {
return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body("文件保存失败");
}
// 文件保存成功
// 更新用户头像记录等操作
//3 修改数据库
//3.1读出数据库原来信息
ApUser apUser = apUserMapper.selectById(id);
//3.2 将头像url写入实体类
apUser.setImage(previewUrl);
//3.3 修改用户信息 写入数据库
apUserMapper.updateById(apUser);
return ResponseEntity.ok("头像上传成功");
自己开发的个人网站,每一行代码都是自己写的。
亲爱的读者,感谢您关注与支持我的博客。您的每一份鼓励都是我前行的动力。若我的文章曾给您带来收获或启发,欢迎打赏支持。打赏款项将用于提升内容质量,为您提供更优质的阅读体验。无论结果如何,都感恩您的陪伴,让我们共同在知识的世界里探索前行!