From 63d71c01dd4be94ac285f9c8d202d9b16fd29580 Mon Sep 17 00:00:00 2001 From: root Date: Sun, 8 Mar 2026 14:27:17 +0800 Subject: [PATCH] feat(admin-backend): add user avatar upload endpoint for admins --- .../controller/UserController.java | 21 +++++++++++++++++++ .../musichouduan/service/UserService.java | 9 ++++++++ .../service/impl/FileServiceImpl.java | 4 ++-- .../service/impl/UserServiceImpl.java | 9 ++++++++ 4 files changed, 41 insertions(+), 2 deletions(-) diff --git a/music-houduan/src/main/java/com/test/musichouduan/controller/UserController.java b/music-houduan/src/main/java/com/test/musichouduan/controller/UserController.java index cbf6c7a..9d7b2f7 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/controller/UserController.java +++ b/music-houduan/src/main/java/com/test/musichouduan/controller/UserController.java @@ -207,6 +207,27 @@ public class UserController { return Result.success("更新成功", userDTO); } + /** + * 管理员上传指定用户头像 + * + * @param id 用户ID + * @param file 头像文件 + * @return 响应结果 + */ + @Operation(summary = "管理员上传用户头像", description = "管理员上传指定用户头像并更新用户信息,需要管理员权限") + @SaCheckRole("admin") + @PostMapping("/{id}/upload/avatar") + public Result adminUploadUserAvatar( + @Parameter(description = "用户ID", example = "1") @PathVariable Long id, + @Parameter(description = "头像文件") @RequestParam("file") MultipartFile file) { + String avatarPhysicalPath = fileService.uploadImage(file); + String avatarUrl = avatarPhysicalPath.replace(System.getProperty("user.dir") + File.separator + "music-houduan", "").replace(File.separator, "/"); + + userService.adminUpdateUserAvatar(id, avatarUrl); + + return Result.success("上传成功", avatarUrl); + } + /** * 上传用户头像 * diff --git a/music-houduan/src/main/java/com/test/musichouduan/service/UserService.java b/music-houduan/src/main/java/com/test/musichouduan/service/UserService.java index 25b4119..8639420 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/service/UserService.java +++ b/music-houduan/src/main/java/com/test/musichouduan/service/UserService.java @@ -107,6 +107,15 @@ public interface UserService { */ UserDTO adminUpdateUser(Long id, UserUpdateRequest request); + /** + * 管理员上传并更新指定用户头像 + * + * @param id 用户ID + * @param avatar 头像地址 + * @return 用户DTO + */ + UserDTO adminUpdateUserAvatar(Long id, String avatar); + /** * 根据ID获取用户实体 * diff --git a/music-houduan/src/main/java/com/test/musichouduan/service/impl/FileServiceImpl.java b/music-houduan/src/main/java/com/test/musichouduan/service/impl/FileServiceImpl.java index 636981a..501fa35 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/service/impl/FileServiceImpl.java +++ b/music-houduan/src/main/java/com/test/musichouduan/service/impl/FileServiceImpl.java @@ -48,9 +48,9 @@ public class FileServiceImpl implements FileService { // 检查文件类型 String originalFilename = file.getOriginalFilename(); String extension = getFileExtension(originalFilename); - List imageTypes = Arrays.asList("jpg", "jpeg", "png", "gif"); + List imageTypes = Arrays.asList("jpg", "jpeg", "png", "gif", "webp"); if (!imageTypes.contains(extension.toLowerCase())) { - throw new BusinessException("只能上传jpg、jpeg、png、gif格式的图片"); + throw new BusinessException("只能上传jpg、jpeg、png、gif、webp格式的图片"); } // 上传文件 diff --git a/music-houduan/src/main/java/com/test/musichouduan/service/impl/UserServiceImpl.java b/music-houduan/src/main/java/com/test/musichouduan/service/impl/UserServiceImpl.java index 65213ca..23dff8d 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/service/impl/UserServiceImpl.java +++ b/music-houduan/src/main/java/com/test/musichouduan/service/impl/UserServiceImpl.java @@ -329,6 +329,15 @@ public class UserServiceImpl implements UserService { return convertToDTO(savedUser); } + @Override + @Transactional + public UserDTO adminUpdateUserAvatar(Long id, String avatar) { + User user = getById(id); + user.setAvatar(avatar); + User savedUser = userRepository.save(user); + return convertToDTO(savedUser); + } + @Override public User getById(Long id) { return userRepository.findById(id)