From 492b337ddd645fbb713bf36a47dd8ad1a3278eef Mon Sep 17 00:00:00 2001 From: H1d3rOne Date: Tue, 10 Mar 2026 06:34:28 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=A4=B4=E5=83=8F=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=AD=98=E5=82=A8=E5=88=B0=E6=9C=8D=E5=8A=A1=E5=99=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 登录时自动下载微信头像到服务器 - 手动上传头像保存到服务器 - 数据库存储服务器上的头像路径 - 添加downloadAvatar方法处理头像下载 --- .../java/xuan/controller/UserController.java | 43 ++++++++++++++++++- 1 file changed, 42 insertions(+), 1 deletion(-) diff --git a/src/main/java/xuan/controller/UserController.java b/src/main/java/xuan/controller/UserController.java index 1b8803e..7c58127 100644 --- a/src/main/java/xuan/controller/UserController.java +++ b/src/main/java/xuan/controller/UserController.java @@ -10,6 +10,8 @@ import xuan.service.UserInfoService; import java.io.File; import java.io.IOException; +import java.io.InputStream; +import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -64,7 +66,12 @@ public class UserController { openId = "guest_" + System.currentTimeMillis(); } - UserInfo user = userInfoService.loginOrRegister(openId, nickname, avatarUrl); + String localAvatarUrl = avatarUrl; + if (avatarUrl != null && !avatarUrl.isEmpty() && avatarUrl.startsWith("http")) { + localAvatarUrl = downloadAvatar(avatarUrl, openId); + } + + UserInfo user = userInfoService.loginOrRegister(openId, nickname, localAvatarUrl); Map data = new HashMap<>(); data.put("id", user.getId()); @@ -88,6 +95,40 @@ public class UserController { return result; } + private String downloadAvatar(String imageUrl, String userId) { + try { + String uploadDir = "uploads/avatars/"; + File dir = new File(uploadDir); + if (!dir.exists()) { + dir.mkdirs(); + } + + String extension = ".jpg"; + if (imageUrl.contains(".")) { + String tempExt = imageUrl.substring(imageUrl.lastIndexOf(".")); + if (tempExt.contains("?")) { + tempExt = tempExt.substring(0, tempExt.indexOf("?")); + } + if (tempExt.length() <= 5 && tempExt.matches("\\.[a-zA-Z]+")) { + extension = tempExt; + } + } + + String filename = userId + "_" + System.currentTimeMillis() + extension; + Path filePath = Paths.get(uploadDir + filename); + + URL url = new URL(imageUrl); + try (InputStream in = url.openStream()) { + Files.copy(in, filePath); + } + + return "/uploads/avatars/" + filename; + } catch (Exception e) { + System.err.println("下载头像失败: " + e.getMessage()); + return imageUrl; + } + } + @GetMapping("/info") public Map getUserInfo(@RequestParam String userId) { Map result = new HashMap<>();