caolinxuan 2 weeks ago
parent
commit
6ada684764

+ 10 - 0
pom.xml

@@ -94,6 +94,16 @@
             <artifactId>spring-boot-starter-test</artifactId>
             <artifactId>spring-boot-starter-test</artifactId>
             <scope>test</scope>
             <scope>test</scope>
         </dependency>
         </dependency>
+        <dependency>
+        <groupId>com.aliyun.oss</groupId>
+        <artifactId>aliyun-sdk-oss</artifactId>
+        <version>3.15.1</version>
+    </dependency>
+    <dependency>
+        <groupId>org.springframework.boot</groupId>
+        <artifactId>spring-boot-starter-web</artifactId>
+    </dependency>
+
     </dependencies>
     </dependencies>
     <dependencyManagement>
     <dependencyManagement>
         <dependencies>
         <dependencies>

+ 43 - 43
src/main/java/com/zhentao/intercepoter/Userinterceptor.java

@@ -1,45 +1,45 @@
-//package com.zhentao.intercepoter;
-//
-//import com.zhentao.config.NullLogin;
-//import com.zhentao.tool.TokenUtils;
-//import org.springframework.beans.factory.annotation.Autowired;
-//import org.springframework.data.redis.core.RedisTemplate;
-//import org.springframework.stereotype.Component;
-//import org.springframework.web.method.HandlerMethod;
-//import org.springframework.web.servlet.HandlerInterceptor;
-//
-//import javax.servlet.http.HttpServletRequest;
-//import javax.servlet.http.HttpServletResponse;
-//
-//@Component
-//public class Userinterceptor implements HandlerInterceptor {
-//    @Autowired
-//    private RedisTemplate<String,String> redisTemplate;
-//    @Override
-//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
-//        String requestURI = request.getRequestURI();
-////        if (requestURI.startsWith("/user/login")||requestURI.startsWith("/user/register")){
-////            return true;
-////        }
-//        String token = request.getHeader("token");
-//        if (token==null){
-//            System.err.println("Token不能为空");
-//            return false;
-//        }
-//        HandlerMethod handlerMethod = (HandlerMethod) handler;
-//        NullLogin annotation = handlerMethod.getMethod().getAnnotation(NullLogin.class);
-//        System.err.println("自定义注解"+annotation);
-//        if (annotation!=null){
-//            return true;
-//        }
-//        String userIdFromToken = TokenUtils.getUserIdFromToken(token);
-//        System.err.println("解析后的ID:"+userIdFromToken);
-//        String s = redisTemplate.opsForValue().get(userIdFromToken);
-//        if (s!=null){
+package com.zhentao.intercepoter;
+
+import com.zhentao.config.NullLogin;
+import com.zhentao.tool.TokenUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Component;
+import org.springframework.web.method.HandlerMethod;
+import org.springframework.web.servlet.HandlerInterceptor;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Component
+public class Userinterceptor implements HandlerInterceptor {
+    @Autowired
+    private RedisTemplate<String,String> redisTemplate;
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
+        String requestURI = request.getRequestURI();
+//        if (requestURI.startsWith("/user/login")||requestURI.startsWith("/user/register")){
 //            return true;
 //            return true;
-//        }else {
-//            System.err.println("Token错误");
-//            return false;
 //        }
 //        }
-//    }
-//}
+        String token = request.getHeader("token");
+        if (token==null){
+            System.err.println("Token不能为空");
+            return false;
+        }
+        HandlerMethod handlerMethod = (HandlerMethod) handler;
+        NullLogin annotation = handlerMethod.getMethod().getAnnotation(NullLogin.class);
+        System.err.println("自定义注解"+annotation);
+        if (annotation!=null){
+            return true;
+        }
+        String userIdFromToken = TokenUtils.getUserIdFromToken(token);
+        System.err.println("解析后的ID:"+userIdFromToken);
+        String s = redisTemplate.opsForValue().get(userIdFromToken);
+        if (s!=null){
+            return true;
+        }else {
+            System.err.println("Token错误");
+            return false;
+        }
+    }
+}

+ 29 - 0
src/main/java/com/zhentao/moment/config/OssConfig.java

@@ -0,0 +1,29 @@
+package com.zhentao.moment.config;
+
+import com.aliyun.oss.OSSClient;
+import com.zhentao.moment.config.OssProperties;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.context.properties.EnableConfigurationProperties;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+@Configuration
+@EnableConfigurationProperties(OssProperties.class)
+public class OssConfig {
+
+    @Autowired
+    private OssProperties ossProperties;
+
+    @Bean
+    public OSSClient ossClient() throws MalformedURLException {
+        // 创建OSSClient实例
+        return new OSSClient(
+                String.valueOf(new URL(ossProperties.getEndpoint())),
+                ossProperties.getAccessKeyId(),
+                ossProperties.getAccessKeySecret()
+        );
+    }
+}

+ 85 - 0
src/main/java/com/zhentao/moment/config/OssProperties.java

@@ -0,0 +1,85 @@
+package com.zhentao.moment.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+
+@ConfigurationProperties(prefix = "aliyun.oss")
+@Data
+public class OssProperties {
+
+    /**
+     * OSS Endpoint
+     */
+    private String endpoint;
+
+    /**
+     * AccessKey ID
+     */
+    private String accessKeyId;
+
+    /**
+     * AccessKey Secret
+     */
+    private String accessKeySecret;
+
+    /**
+     * Bucket名称
+     */
+    private String bucketName;
+
+    /**
+     * 上传配置
+     */
+    private Upload upload = new Upload();
+
+    /**
+     * 上传配置内部类
+     */
+    @Data
+    public static class Upload {
+
+        /**
+         * 图片上传配置
+         */
+        private Image image = new Image();
+
+        /**
+         * 视频上传配置
+         */
+        private Video video = new Video();
+
+        /**
+         * 图片上传配置内部类
+         */
+        @Data
+        public static class Image {
+
+            /**
+             * 图片上传目录
+             */
+            private String dir = "moments/images/";
+
+            /**
+             * 图片最大大小(字节),默认10MB
+             */
+            private long maxSize = 10 * 1024 * 1024;
+        }
+
+        /**
+         * 视频上传配置内部类
+         */
+        @Data
+        public static class Video {
+
+            /**
+             * 视频上传目录
+             */
+            private String dir = "moments/videos/";
+
+            /**
+             * 视频最大大小(字节),默认50MB
+             */
+            private long maxSize = 50 * 1024 * 1024;
+        }
+    }
+}

+ 29 - 11
src/main/java/com/zhentao/moment/controller/MonmentController.java

@@ -1,14 +1,15 @@
 package com.zhentao.moment.controller;
 package com.zhentao.moment.controller;
 
 
 import com.zhentao.moment.dto.MonmentDto;
 import com.zhentao.moment.dto.MonmentDto;
+import com.zhentao.moment.dto.UserFriendDto;
 import com.zhentao.moment.service.UserMomentsService;
 import com.zhentao.moment.service.UserMomentsService;
 import com.zhentao.tool.TokenUtils;
 import com.zhentao.tool.TokenUtils;
 import com.zhentao.vo.Result;
 import com.zhentao.vo.Result;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RequestBody;
-import org.springframework.web.bind.annotation.RequestHeader;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.util.List;
 
 
 @RestController
 @RestController
 @RequestMapping("monment")
 @RequestMapping("monment")
@@ -17,16 +18,33 @@ public class MonmentController {
     private UserMomentsService userMomentsService;
     private UserMomentsService userMomentsService;
 //    发布朋友圈
 //    发布朋友圈
     @RequestMapping("sendMonment")
     @RequestMapping("sendMonment")
-    public Result sendMonment(@RequestHeader String  token,@RequestBody MonmentDto monmentDto){
+    public Result sendMonment(@RequestHeader String  token,@ModelAttribute MonmentDto monmentDto){
         return userMomentsService.sendMonment(token,monmentDto);
         return userMomentsService.sendMonment(token,monmentDto);
     }
     }
-////    查看所有朋友圈
-//    @RequestMapping("getAllMonment")
+//    朋友圈的个人信息
+    @RequestMapping("userinfo")
+    public Result userinfo(@RequestHeader String token){
+        return Result.OK(userMomentsService.userinfo(token),"查询成功");
+    }
+
 //    删除朋友圈
 //    删除朋友圈
-//    @RequestMapping("deleteMonment")
-//    public Result deleteMonment(@RequestHeader String token,@RequestBody MonmentDto monmentDto){
+    @RequestMapping("deleteMonment")
+    public Result deleteMonment(@RequestHeader String token,@RequestBody MonmentDto monmentDto){
+
+        String uid = TokenUtils.getUserIdFromToken(token);
+        monmentDto.setUid(Long.valueOf(uid));
+        return userMomentsService.deleteMonment(monmentDto);
+    }
+//    查看我的朋友圈
+    @RequestMapping("getMyMonment")
+    public Result getMyMonment(@RequestHeader String token){
+        String uid = TokenUtils.getUserIdFromToken(token);
+        return Result.OK(userMomentsService.getMyMonment(Long.valueOf(uid)),"查询成功");
+    }
+//    查看好友的朋友圈
+//    @RequestMapping("getFriendMonment")
+//    public Result getFriendMonment(@RequestHeader String token){
 //        String uid = TokenUtils.getUserIdFromToken(token);
 //        String uid = TokenUtils.getUserIdFromToken(token);
-//        monmentDto.setUid(Long.valueOf(uid));
-//        return userMomentsService.deleteMonment(monmentDto);
+//        return Result.OK(userMomentsService.getFriendMonment(Long.valueOf(uid)),"查询成功")
 //    }
 //    }
 }
 }

+ 7 - 5
src/main/java/com/zhentao/moment/domain/UserMoments.java

@@ -16,7 +16,7 @@ import lombok.Data;
 @Data
 @Data
 public class UserMoments implements Serializable {
 public class UserMoments implements Serializable {
     /**
     /**
-     * 
+     *
      */
      */
     @TableId(type = IdType.AUTO)
     @TableId(type = IdType.AUTO)
     private Long momentId;
     private Long momentId;
@@ -35,7 +35,9 @@ public class UserMoments implements Serializable {
      * 内容类型(1-文本,2-图片,3-视频)
      * 内容类型(1-文本,2-图片,3-视频)
      */
      */
     private Integer contentType;
     private Integer contentType;
-
+    private String url;
+    private String filename;
+    private Long filesize;
     /**
     /**
      * 可见性(0-公开,1-仅好友,2-私密)
      * 可见性(0-公开,1-仅好友,2-私密)
      */
      */
@@ -47,12 +49,12 @@ public class UserMoments implements Serializable {
     private String location;
     private String location;
 
 
     /**
     /**
-     * 
+     *
      */
      */
     private Date createdAt;
     private Date createdAt;
 
 
     /**
     /**
-     * 
+     *
      */
      */
     private Date updatedAt;
     private Date updatedAt;
 
 
@@ -114,4 +116,4 @@ public class UserMoments implements Serializable {
         sb.append("]");
         sb.append("]");
         return sb.toString();
         return sb.toString();
     }
     }
-}
+}

+ 3 - 0
src/main/java/com/zhentao/moment/dto/MonmentDto.java

@@ -3,6 +3,8 @@ package com.zhentao.moment.dto;
 import lombok.Data;
 import lombok.Data;
 import org.springframework.web.multipart.MultipartFile;
 import org.springframework.web.multipart.MultipartFile;
 
 
+import java.util.List;
+
 @Data
 @Data
 public class MonmentDto {
 public class MonmentDto {
     private Long uid;
     private Long uid;
@@ -11,4 +13,5 @@ public class MonmentDto {
 //    private MultipartFile urlImage;
 //    private MultipartFile urlImage;
     private Integer contentType;//文章类型
     private Integer contentType;//文章类型
     private String location;
     private String location;
+    private List<MultipartFile> files;
 }
 }

+ 8 - 0
src/main/java/com/zhentao/moment/dto/UserFriendDto.java

@@ -0,0 +1,8 @@
+package com.zhentao.moment.dto;
+
+import lombok.Data;
+
+@Data
+public class UserFriendDto {
+
+}

+ 9 - 1
src/main/java/com/zhentao/moment/service/UserMomentsService.java

@@ -5,6 +5,8 @@ import com.baomidou.mybatisplus.extension.service.IService;
 import com.zhentao.moment.dto.MonmentDto;
 import com.zhentao.moment.dto.MonmentDto;
 import com.zhentao.vo.Result;
 import com.zhentao.vo.Result;
 
 
+import java.util.List;
+
 /**
 /**
 * @author 86159
 * @author 86159
 * @description 针对表【user_moments(朋友圈动态表)】的数据库操作Service
 * @description 针对表【user_moments(朋友圈动态表)】的数据库操作Service
@@ -14,5 +16,11 @@ public interface UserMomentsService extends IService<UserMoments> {
 //  发布朋友圈
 //  发布朋友圈
     Result sendMonment(String  token,MonmentDto monmentDto);
     Result sendMonment(String  token,MonmentDto monmentDto);
 //  删除朋友圈
 //  删除朋友圈
-//    Result deleteMonment(MonmentDto monmentDto);
+    Result deleteMonment(MonmentDto monmentDto);
+//  获取用户信息
+    Result userinfo(String token);
+    //    查看我的朋友圈
+    List<UserMoments> getMyMonment(Long userId);
+
+//    List<> getFriendMonment(Long valueOf);
 }
 }

+ 184 - 29
src/main/java/com/zhentao/moment/service/impl/UserMomentsServiceImpl.java

@@ -1,18 +1,34 @@
 package com.zhentao.moment.service.impl;
 package com.zhentao.moment.service.impl;
 
 
+import com.aliyun.oss.OSSClient;
+import com.aliyun.oss.model.ObjectMetadata;
+import com.aliyun.oss.model.PutObjectRequest;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.zhentao.moment.config.OssConfig;
+import com.zhentao.moment.config.OssProperties;
 import com.zhentao.moment.domain.UserMoments;
 import com.zhentao.moment.domain.UserMoments;
 import com.zhentao.moment.dto.MonmentDto;
 import com.zhentao.moment.dto.MonmentDto;
 import com.zhentao.moment.enums.ContentTypeEnum;
 import com.zhentao.moment.enums.ContentTypeEnum;
 import com.zhentao.moment.service.UserMomentsService;
 import com.zhentao.moment.service.UserMomentsService;
 import com.zhentao.moment.mapper.UserMomentsMapper;
 import com.zhentao.moment.mapper.UserMomentsMapper;
 import com.zhentao.tool.TokenUtils;
 import com.zhentao.tool.TokenUtils;
+import com.zhentao.user.domain.UserLogin;
+import com.zhentao.user.mapper.UserLoginMapper;
 import com.zhentao.utils.SensitiveWordFilter;
 import com.zhentao.utils.SensitiveWordFilter;
 import com.zhentao.utils.SnowflakeUtil;
 import com.zhentao.utils.SnowflakeUtil;
 import com.zhentao.vo.Result;
 import com.zhentao.vo.Result;
 import io.jsonwebtoken.Claims;
 import io.jsonwebtoken.Claims;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.stereotype.Service;
+import org.springframework.web.multipart.MultipartFile;
+
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
 
 
 /**
 /**
 * @author 86159
 * @author 86159
@@ -24,6 +40,13 @@ public class UserMomentsServiceImpl extends ServiceImpl<UserMomentsMapper, UserM
     implements UserMomentsService{
     implements UserMomentsService{
     @Autowired
     @Autowired
     private UserMomentsMapper userMomentsMapper;
     private UserMomentsMapper userMomentsMapper;
+    @Autowired
+    private UserLoginMapper userLoginMapper;
+    @Autowired
+
+    private OSSClient ossClient;
+    @Autowired
+    private OssProperties ossProperties;
     @Override
     @Override
     public Result sendMonment(String token,MonmentDto monmentDto) {
     public Result sendMonment(String token,MonmentDto monmentDto) {
         if (monmentDto.getContent()==null){
         if (monmentDto.getContent()==null){
@@ -37,56 +60,188 @@ public class UserMomentsServiceImpl extends ServiceImpl<UserMomentsMapper, UserM
             userMoments.setMomentId(SnowflakeUtil.nextId());
             userMoments.setMomentId(SnowflakeUtil.nextId());
             String userId = TokenUtils.getUserIdFromToken(token);
             String userId = TokenUtils.getUserIdFromToken(token);
             userMoments.setUserId(Long.valueOf(userId));
             userMoments.setUserId(Long.valueOf(userId));
+            String filter = SensitiveWordFilter.filter(monmentDto.getContent());
+            userMoments.setContent(filter);
             Integer typeCode = monmentDto.getContentType();
             Integer typeCode = monmentDto.getContentType();
             ContentTypeEnum type = ContentTypeEnum.getByCode(typeCode);
             ContentTypeEnum type = ContentTypeEnum.getByCode(typeCode);
+            if (monmentDto.getFiles()!=null && !monmentDto.getFiles().isEmpty()){
+                if (type!=ContentTypeEnum.IMAGE){
+                    return Result.error(400,"只有图片类型支持上传多张");
+                }
             switch (type){
             switch (type){
-                case TEXT:
-                    String filter = SensitiveWordFilter.filter(monmentDto.getContent());
-                    userMoments.setContent(filter);
-                    break;
                 case IMAGE:
                 case IMAGE:
-                    validateImageContent(monmentDto.getContent());
-//                    userMoments.setContentType(ContentTypeEnum.IMAGE.getCode());
+                    for (MultipartFile file : monmentDto.getFiles()){
+                        if (file.isEmpty()){
+                            return Result.error(400,"图片不能为空");
+                        }
+                        validateImageContent(file);
+                    }
+                    List<String> imageUrls = new ArrayList<>();
+                    List<String> imageNames = new ArrayList<>();
+                    Long totalSize = 0L;
+                    String imageDir = ossProperties.getUpload().getImage().getDir();
+                    for (MultipartFile file : monmentDto.getFiles()){
+                        String imageFileName = userId + "/" + System.currentTimeMillis() +
+                                getFileExtension(file.getOriginalFilename());
+                        String ossFilePath = imageDir + imageFileName;
+//                        上传OSS
+                        String url = uploadToOss(file, ossFilePath);
+                        imageUrls.add(url);
+                        imageNames.add(file.getOriginalFilename());
+                        totalSize+=file.getSize();
+                    }
+                    String urlJson = "[" + imageUrls.stream()
+                            .map(url -> "\"" + url.replace("\"", "\\\"") + "\"") // 确保URL中的双引号被转义
+                            .collect(Collectors.joining(",")) + "]";
+                    userMoments.setUrl(urlJson);
+                    String nameJson = "[" + imageNames.stream()
+                            .map(name -> "\"" + name.replace("\"", "\\\"") + "\"")
+                            .collect(Collectors.joining(",")) + "]";
+                    userMoments.setFilename(nameJson);
+                    userMoments.setFilesize(totalSize);
+
                     break;
                     break;
                 case VIDEO:
                 case VIDEO:
-                    validateVideoContent(monmentDto.getContent());
-//                    userMoments.setContentType(ContentTypeEnum.VIDEO.getCode());
+                    MultipartFile videoFile = monmentDto.getFiles().get(0);
+                    if (videoFile.isEmpty()){
+                        return Result.error(400,"视频不能为空");
+                    }
+                    validateVideoContent(videoFile);
+                    String videoDir = ossProperties.getUpload().getVideo().getDir();
+                    String videoFileName = userId + "/" + System.currentTimeMillis() +
+                            getFileExtension(videoFile.getOriginalFilename());
+                    String ossFilePath = videoDir + videoFileName;
+                    String url = uploadToOss(videoFile, ossFilePath);
+
+                    userMoments.setUrl(url);
+
+                    userMoments.setFilename(videoFile.getOriginalFilename());
+                    userMoments.setFilesize(videoFile.getSize());
                     break;
                     break;
                 default:
                 default:
-                    return Result.error(400,"内容类型错误");
+                return Result.error(400,"内容类型错误");
+            }
+//            上传文件到OSS
+
+            }else if (type!=ContentTypeEnum.TEXT){
+                return Result.ERR(null,"类型上传不正确");
             }
             }
 ////            userMoments.setContentType();
 ////            userMoments.setContentType();
 //            userMoments.setContent(monmentDto.getContent());
 //            userMoments.setContent(monmentDto.getContent());
+            userMoments.setVisibility(monmentDto.getVisible());
             userMomentsMapper.insert(userMoments);
             userMomentsMapper.insert(userMoments);
+            Map<String,Object> map=new HashMap<>();
+            map.put("monmentId",userMoments.getMomentId());
+            map.put("ossFilePath",userMoments.getUrl());
+            return Result.OK(map,"发送成功");
         }catch (Exception e){
         }catch (Exception e){
             e.printStackTrace();
             e.printStackTrace();
+            return Result.error(500,"发送失败");
+        }
+
+    }
+// 删除朋友圈
+    @Override
+    public Result deleteMonment(MonmentDto monmentDto) {
+        return null;
+    }
+//查询个人信息
+    @Override
+    public Result userinfo(String token) {
+        String userId = TokenUtils.getUserIdFromToken(token);
+        if (userId==null){
+            return Result.error(400,"没有userid");
         }
         }
-        return Result.OK(null,"发送成功");
+        UserLogin userLogin = userLoginMapper.selectById(userId);
+        return Result.OK(userLogin,"查询成功");
     }
     }
 
 
-//    @Override
-//    public Result deleteMonment(MonmentDto monmentDto) {
-//
-//
-//    }
-
-    // 图片内容校验
-    private void validateImageContent(String content) {
-        // content 存图片 URL 列表,用逗号分隔
-        String[] imageUrls = content.split(",");
-        for (String url : imageUrls) {
-            if (!url.matches("^https?://.*\\.(png|jpg|jpeg)$")) {
-                throw new IllegalArgumentException("图片 URL 格式错误: " + url);
-            }
+    @Override
+    public List<UserMoments> getMyMonment(Long userId) {
+        QueryWrapper<UserMoments> queryWrapper=new QueryWrapper<>();
+        queryWrapper.eq("user_id",userId);
+        List<UserMoments> userMoments = userMomentsMapper.selectList(queryWrapper);
+        return userMoments;
+    }
+
+    //    **
+//            * 上传文件到OSS
+//     */
+    private String uploadToOss(MultipartFile file, String ossFilePath) throws IOException {
+        String bucketName = ossProperties.getBucketName();
+
+        // 创建PutObject请求
+        PutObjectRequest putObjectRequest = new PutObjectRequest(bucketName, ossFilePath,
+                file.getInputStream(), null);
+
+        // 设置对象元信息
+        ObjectMetadata metadata = new ObjectMetadata();
+        metadata.setContentType(file.getContentType());
+        metadata.setContentLength(file.getSize());
+        putObjectRequest.setMetadata(metadata);
+
+        // 上传文件
+        ossClient.putObject(putObjectRequest);
+
+        // 构建访问URL
+        String endpoint = ossProperties.getEndpoint();
+        String cleanEndpoint = endpoint.replaceAll("^https://", "");
+        String domain = "https://" + bucketName + "." + cleanEndpoint;
+        return domain + "/" + ossFilePath;
+    }
+
+    /**
+     * 获取文件扩展名
+     */
+    private String getFileExtension(String fileName) {
+        if (fileName == null || !fileName.contains(".")) {
+            return "";
+        }
+        return fileName.substring(fileName.lastIndexOf("."));
+    }
+
+    /**
+     * 验证图片内容
+     */
+    private void validateImageContent(MultipartFile file) throws Exception {
+        if (file == null || file.isEmpty()) {
+            throw new Exception("图片不能为空");
         }
         }
+
+        String contentType = file.getContentType();
+        if (!contentType.startsWith("image/")) {
+            throw new Exception("请上传图片格式文件");
+        }
+
+        // 验证图片大小(例如限制为10MB)
+        if (file.getSize() > ossProperties.getUpload().getImage().getMaxSize()) {
+            throw new Exception("图片大小不能超过" +
+                    (ossProperties.getUpload().getImage().getMaxSize() / (1024 * 1024)) + "MB");
+        }
+
+        // 可以添加更多图片验证逻辑,如图片尺寸、格式等
     }
     }
 
 
-    // 视频内容校验
-    private void validateVideoContent(String content) {
-        //  content 存视频 URL
-        if (!content.matches("^https?://.*\\.(mp4|avi)$")) {
-            throw new IllegalArgumentException("视频 URL 格式错误: " + content);
+    /**
+     * 验证视频内容
+     */
+    private void validateVideoContent(MultipartFile file) throws Exception {
+        if (file == null || file.isEmpty()) {
+            throw new Exception("视频不能为空");
         }
         }
+
+        String contentType = file.getContentType();
+        if (!contentType.startsWith("video/")) {
+            throw new Exception("请上传视频格式文件");
+        }
+
+        // 验证视频大小(例如限制为50MB)
+        if (file.getSize() > ossProperties.getUpload().getVideo().getMaxSize()) {
+            throw new Exception("视频大小不能超过" +
+                    (ossProperties.getUpload().getVideo().getMaxSize() / (1024 * 1024)) + "MB");
+        }
+
+        // 可以添加更多视频验证逻辑,如视频时长、分辨率等
     }
     }
 }
 }
 
 

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

@@ -16,6 +16,12 @@ public class Result {
         result.setMsg(msg);
         result.setMsg(msg);
         return result;
         return result;
     }
     }
+    public static Result OKK(Integer  code,String msg) {
+        Result result = new Result();
+        result.setCode(200);
+        result.setMsg(msg);
+        return result;
+    }
 
 
 
 
     public static Result ERR(Object data,String msg) {
     public static Result ERR(Object data,String msg) {

+ 13 - 0
src/main/resources/application.yml

@@ -33,3 +33,16 @@ spring:
     host: 47.110.46.22
     host: 47.110.46.22
     port: 6379
     port: 6379
     database: 0
     database: 0
+aliyun:
+  oss:
+    endpoint: https://oss-cn-beijing.aliyuncs.com  # OSS服务区域节点
+    accessKeyId: LTAI5t9CjnfudojK8fjikh9Y          # 替换为您的AccessKey ID
+    accessKeySecret: NTcv48xVIJ8542Q6UsehVWgOu5NN6A  # 替换为您的AccessKey Secret
+    bucketName: clx1             # 替换为您的Bucket名称
+    upload:
+      image:
+        dir: moments/images/                 # 图片上传目录
+        maxSize: 94371840                   # 图片最大大小(字节),默认10MB
+      video:
+        dir: moments/videos/                 # 视频上传目录
+        maxSize: 52428800