From 1a48452ccd66d71b1abf12bf4161ba9d5295b6c7 Mon Sep 17 00:00:00 2001 From: H1d3rOne Date: Tue, 10 Mar 2026 05:28:24 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=B7=BB=E5=8A=A0=E5=A4=B4=E5=83=8F?= =?UTF-8?q?=E4=B8=8B=E6=96=B9=E4=BF=AE=E6=94=B9=E6=8C=89=E9=92=AE=E5=92=8C?= =?UTF-8?q?=E5=A4=B4=E5=83=8F=E4=B8=8A=E4=BC=A0=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - mine.vue: 头像下方添加灰色修改按钮 - api.js: 添加getBaseUrl方法 - UserController.java: 添加uploadAvatar接口 - WebConfig.java: 配置静态文件服务 - 支持修改用户名和上传头像 --- src/main/java/xuan/config/WebConfig.java | 15 +++ .../java/xuan/controller/UserController.java | 57 +++++++++ xuan-deduct-uniapp/src/pages/mine/mine.vue | 113 +++++++++++++----- xuan-deduct-uniapp/src/utils/api.js | 3 +- 4 files changed, 158 insertions(+), 30 deletions(-) create mode 100644 src/main/java/xuan/config/WebConfig.java diff --git a/src/main/java/xuan/config/WebConfig.java b/src/main/java/xuan/config/WebConfig.java new file mode 100644 index 0000000..6e3ebb7 --- /dev/null +++ b/src/main/java/xuan/config/WebConfig.java @@ -0,0 +1,15 @@ +package xuan.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addResourceHandlers(ResourceHandlerRegistry registry) { + registry.addResourceHandler("/uploads/**") + .addResourceLocations("file:uploads/"); + } +} diff --git a/src/main/java/xuan/controller/UserController.java b/src/main/java/xuan/controller/UserController.java index 8aefe05..1b8803e 100644 --- a/src/main/java/xuan/controller/UserController.java +++ b/src/main/java/xuan/controller/UserController.java @@ -4,11 +4,18 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; +import org.springframework.web.multipart.MultipartFile; import xuan.entity.UserInfo; import xuan.service.UserInfoService; +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import java.util.HashMap; import java.util.Map; +import java.util.UUID; @RestController @RequestMapping("/api/user") @@ -319,4 +326,54 @@ public class UserController { } return result; } + + @PostMapping("/uploadAvatar") + public Map uploadAvatar( + @RequestParam("file") MultipartFile file, + @RequestParam("userId") String userId) { + Map result = new HashMap<>(); + try { + if (file.isEmpty()) { + result.put("success", false); + result.put("error", "请选择文件"); + return result; + } + + String uploadDir = "uploads/avatars/"; + File dir = new File(uploadDir); + if (!dir.exists()) { + dir.mkdirs(); + } + + String originalFilename = file.getOriginalFilename(); + String extension = ""; + if (originalFilename != null && originalFilename.contains(".")) { + extension = originalFilename.substring(originalFilename.lastIndexOf(".")); + } + + String filename = UUID.randomUUID().toString() + extension; + Path filePath = Paths.get(uploadDir + filename); + Files.write(filePath, file.getBytes()); + + String avatarUrl = "/uploads/avatars/" + filename; + + UserInfo user = userInfoService.updateAvatarUrl(userId, avatarUrl); + if (user != null) { + Map data = new HashMap<>(); + data.put("avatarUrl", avatarUrl); + result.put("success", true); + result.put("data", data); + } else { + result.put("success", false); + result.put("error", "用户不存在"); + } + } catch (IOException e) { + result.put("success", false); + result.put("error", "文件上传失败: " + e.getMessage()); + } catch (Exception e) { + result.put("success", false); + result.put("error", e.getMessage()); + } + return result; + } } diff --git a/xuan-deduct-uniapp/src/pages/mine/mine.vue b/xuan-deduct-uniapp/src/pages/mine/mine.vue index 506a86d..4f599b4 100644 --- a/xuan-deduct-uniapp/src/pages/mine/mine.vue +++ b/xuan-deduct-uniapp/src/pages/mine/mine.vue @@ -1,11 +1,13 @@