fengjiajia 2 weeks ago
parent
commit
f17ceb1f7b

+ 2 - 0
pom.xml

@@ -116,6 +116,8 @@
             <version>3.15.1</version> <!-- 使用最新稳定版本 -->
         </dependency>
 
+
+
     </dependencies>
     <dependencyManagement>
         <dependencies>

+ 0 - 111
src/main/java/com/zhentao/oss/controller/ossController.java

@@ -1,111 +0,0 @@
-package com.zhentao.oss.controller;
-
-
-import com.aliyun.oss.OSS;
-import com.aliyun.oss.OSSClientBuilder;
-import com.aliyun.oss.model.PutObjectRequest;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.RestController;
-import org.springframework.web.multipart.MultipartFile;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.UUID;
-
-@RestController
-@RequestMapping("/api/upload")
-public class ossController {
-
-    @Value("${aliyun.oss.endpoint}")
-    private String endpoint;
-
-    @Value("${aliyun.oss.accessKeyId}")
-    private String accessKeyId;
-
-    @Value("${aliyun.oss.accessKeySecret}")
-    private String accessKeySecret;
-
-    @Value("${aliyun.oss.bucketName}")
-    private String bucketName;
-
-    // 允许的图片格式
-    private static final String[] ALLOWED_TYPES = {
-            "image/jpeg", "image/png", "image/gif"
-    };
-
-    @PostMapping("/simple-image")
-    public Map<String, Object> uploadSimpleImage(@RequestParam("file") MultipartFile file) {
-        Map<String, Object> result = new HashMap<>();
-
-        // 基础验证
-        if (file == null || file.isEmpty()) {
-            result.put("code", 400);
-            result.put("message", "上传图片不能为空");
-            return result;
-        }
-
-        // 验证图片格式
-        String contentType = file.getContentType();
-        if (!isValidImageType(contentType)) {
-            result.put("code", 400);
-            result.put("message", "仅支持JPG、PNG、GIF格式的图片");
-            return result;
-        }
-
-        OSS ossClient = null;
-        try {
-            ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
-
-            // 生成唯一文件名
-            String originalFilename = file.getOriginalFilename();
-            String extension = getFileExtension(originalFilename);
-            String fileName = UUID.randomUUID().toString() + "." + extension;
-
-            // 上传图片
-            PutObjectRequest putObjectRequest = new PutObjectRequest(
-                    bucketName, fileName, file.getInputStream()
-            );
-            ossClient.putObject(putObjectRequest);
-
-            // 构建访问URL
-            String endpointWithoutProtocol = endpoint.replaceFirst("^https?://", "");
-            String imageUrl = "https://" + bucketName + "." + endpointWithoutProtocol + "/" + fileName;
-
-            // 返回结果
-            result.put("code", 200);
-            result.put("message", "图片上传成功");
-            result.put("imageUrl", imageUrl);
-
-        } catch (IOException e) {
-            result.put("code", 500);
-            result.put("message", "上传失败:" + e.getMessage());
-        } finally {
-            if (ossClient != null) {
-                ossClient.shutdown();
-            }
-        }
-
-        return result;
-    }
-
-    private boolean isValidImageType(String contentType) {
-        if (contentType == null) return false;
-        for (String type : ALLOWED_TYPES) {
-            if (contentType.equalsIgnoreCase(type)) {
-                return true;
-            }
-        }
-        return false;
-    }
-
-    private String getFileExtension(String fileName) {
-        if (fileName == null || !fileName.contains(".")) {
-            return "jpg";
-        }
-        return fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
-    }
-}

+ 17 - 0
src/main/java/com/zhentao/osspicture/OssConfig.java

@@ -0,0 +1,17 @@
+package com.zhentao.osspicture;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.context.annotation.Configuration;
+
+@Data
+@Configuration
+@ConfigurationProperties(prefix = "aliyun.oss")
+public class OssConfig {
+    private String endpoint;
+    private String accessKeyId;
+    private String accessKeySecret;
+    private String bucketName;
+    private String fileHost;
+    private Integer urlExpireTime;
+}

+ 61 - 0
src/main/java/com/zhentao/osspicture/OssUtil.java

@@ -0,0 +1,61 @@
+package com.zhentao.osspicture;
+
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.model.PutObjectRequest;
+import org.springframework.stereotype.Component;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.UUID;
+
+@Component
+public class OssUtil {
+
+    // 从配置文件中读取OSS相关信息
+    private static final String endpoint = "https://oss-cn-beijing.aliyuncs.com";
+    private static final String accessKeyId = "LTAI5tH9VHPZwGJu4UX3hrL5";
+    private static final String accessKeySecret = "mbsutFJYLkzosvvKNr0DD28XSg4mqA";
+    private static final String bucketName = "fjj1";
+
+    public String uploadFile(MultipartFile file) throws IOException {
+        // 创建OSSClient实例
+        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
+
+        try {
+            // 生成唯一的文件名
+//            String fileName = UUID.randomUUID().toString() + "-" + file.getOriginalFilename();
+            String originalFilename = file.getOriginalFilename();
+            String extension = getFileExtension(originalFilename);
+            String fileName = UUID.randomUUID().toString() + "." + extension;
+            //上传图片
+            PutObjectRequest putObjectRequest = new PutObjectRequest(
+                    bucketName, fileName, file.getInputStream()
+            );
+            ossClient.putObject(putObjectRequest);
+
+            // 拼接文件访问URL
+            String endpointWithoutProtocol = endpoint.replaceFirst("^https?://", "");
+            String imageUrl = "https://" + bucketName + "." + endpointWithoutProtocol + "/" + fileName;
+
+            System.err.println(imageUrl);
+            // 返回文件访问URL
+            return imageUrl;
+
+
+        }catch (IOException e){
+            e.printStackTrace();
+        } finally {
+            // 关闭OSSClient
+            ossClient.shutdown();
+        }
+        return null;
+    }
+    private String getFileExtension(String fileName) {
+        if (fileName == null || !fileName.contains(".")) {
+            return "jpg";
+        }
+        return fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
+    }
+}

+ 61 - 4
src/main/java/com/zhentao/user/controller/UserController.java

@@ -1,25 +1,43 @@
 package com.zhentao.user.controller;
 
+import com.aliyun.oss.OSS;
+import com.aliyun.oss.OSSClientBuilder;
+import com.aliyun.oss.model.PutObjectRequest;
 import com.zhentao.config.NullLogin;
+
+import com.zhentao.osspicture.OssUtil;
+import com.zhentao.tool.TokenUtils;
+import com.zhentao.user.domain.UserLogin;
 import com.zhentao.user.dto.*;
 import com.zhentao.user.service.UserLoginService;
 import com.zhentao.vo.Result;
+import lombok.RequiredArgsConstructor;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
 
 import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.UUID;
 
 
 @RestController
 @RequestMapping("user")
+@RequiredArgsConstructor
+@Validated
 public class UserController {
 
     @Autowired
     public UserLoginService userLoginService;
 
+    @Autowired
+    public OssUtil ossUtil;
+
     //注册
     @PostMapping("/register")
     @NullLogin
@@ -55,4 +73,43 @@ public class UserController {
     public Result ForgetPass(@RequestBody @Valid ForgetPassDto forgetPassDto) {
         return userLoginService.ForgetPass(forgetPassDto);
     }
+
+
+    /**
+     * 上传头像
+     */
+    @PostMapping("/upload-avatar")
+    @NullLogin
+    public Map<String, Object> uploadAvatar(@NotNull(message = "请选择上传文件")
+                                            @RequestParam("file") MultipartFile file) {
+        Map<String, Object> result = new HashMap<>();
+
+        try {
+            // 上传到OSS
+            String url = ossUtil.uploadFile(file);
+
+            // TODO: 保存URL到数据库
+            // userService.updateAvatar(userId, url);
+
+            result.put("success", true);
+            result.put("message", "上传成功");
+            result.put("url", url);
+        } catch (IOException e) {
+            result.put("success", false);
+            result.put("message", "上传失败: " + e.getMessage());
+        }
+
+        return result;
+    }
+
+
+    //根据ID查询用户的信息
+    @GetMapping("getUserById")
+    @NullLogin
+    public Result getUserById(@RequestHeader("token") String token) {
+        String userIdFromToken = TokenUtils.getUserIdFromToken(token);
+        UserLogin userById = userLoginService.getUserById(Long.valueOf(userIdFromToken));
+        System.err.println(userById);
+        return Result.OK(userById, "查询成功");
+    }
 }

+ 53 - 0
src/main/java/com/zhentao/user/dto/FriendDto.java

@@ -0,0 +1,53 @@
+package com.zhentao.user.dto;
+
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+
+import java.util.Date;
+
+@Data
+public class FriendDto {
+    /**
+     * 用户ID
+     */
+    @TableId
+    private Long id;
+
+    /**
+     * 账号
+     */
+    private String userUsername;
+
+
+
+    /**
+     * 用户昵称
+     */
+    private String nickName;
+
+    /**
+     * 头像图片
+     */
+    private String avatar;
+
+    /**
+     * 用户名称
+     */
+    private String userName;
+
+    /**
+     * 性别1男2女3未知
+     */
+    private Integer gender;
+
+    /**
+     * 个性签名
+     */
+    private String userIntro;
+
+
+    @TableField(exist = false)
+    private static final long serialVersionUID = 1L;
+
+}

+ 7 - 0
src/main/java/com/zhentao/user/service/UserLoginService.java

@@ -4,6 +4,7 @@ import com.zhentao.user.domain.UserLogin;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.zhentao.user.dto.*;
 import com.zhentao.vo.Result;
+import org.springframework.web.multipart.MultipartFile;
 
 /**
 * @author 86183
@@ -23,4 +24,10 @@ public interface UserLoginService extends IService<UserLogin> {
     Result UserPassLogin(UserPassDto userPassDto);
     //    忘记密码
     Result ForgetPass(ForgetPassDto forgetPassDto);
+
+
+    //根据id查询用户的信息
+    UserLogin getUserById(Long id);
+
+    
 }

+ 11 - 0
src/main/java/com/zhentao/user/service/impl/UserLoginServiceImpl.java

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.zhentao.enums.ApiServerException;
 import com.zhentao.exception.AsynException;
+
 import com.zhentao.tool.TokenUtils;
 import com.zhentao.user.domain.UserLogin;
 import com.zhentao.user.dto.*;
@@ -17,6 +18,7 @@ import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.data.redis.core.StringRedisTemplate;
 import org.springframework.stereotype.Service;
 import org.springframework.util.DigestUtils;
+import org.springframework.web.multipart.MultipartFile;
 
 import java.util.UUID;
 import java.util.concurrent.TimeUnit;
@@ -261,6 +263,15 @@ public class UserLoginServiceImpl extends ServiceImpl<UserLoginMapper, UserLogin
         return null;
     }
 
+    //获取用户信息
+
+    @Override
+    public UserLogin getUserById(Long id) {
+        UserLogin userLogin = userLoginMapper.selectById(id);
+        return userLogin;
+    }
+
+
 }
 
 

+ 7 - 0
src/main/java/com/zhentao/vo/Result.java

@@ -34,5 +34,12 @@ public class Result {
     }
 
 
+    public static Result success(String msg)
+    {
+        return Result.success("操作成功");
+    }
+
+    public void put(String url, String imageUrl) {
 
+    }
 }