From 448ce1d3d605c51a3fcd613f8b445689b8c5d4b0 Mon Sep 17 00:00:00 2001 From: KilLze Date: Thu, 8 Jan 2026 00:06:10 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E6=88=90=E8=81=8A=E5=A4=A9=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=8A=E4=BC=A0OSS?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../bao/dating/controller/ChatController.java | 12 ++++ .../com/bao/dating/service/ChatService.java | 8 +++ .../dating/service/impl/ChatServiceImpl.java | 56 +++++++++++++++++++ 3 files changed, 76 insertions(+) diff --git a/src/main/java/com/bao/dating/controller/ChatController.java b/src/main/java/com/bao/dating/controller/ChatController.java index 0466ecc..56ae9c4 100644 --- a/src/main/java/com/bao/dating/controller/ChatController.java +++ b/src/main/java/com/bao/dating/controller/ChatController.java @@ -11,6 +11,7 @@ import com.bao.dating.service.ChatService; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.util.List; @@ -25,6 +26,17 @@ public class ChatController { @Autowired private ChatService chatService; + /** + * 上传文件 + * @param file 文件 + * @return 文件URL + */ + @PostMapping("/upload") + public Result uploadVideo(@RequestParam MultipartFile file) { + String url = chatService.uploadChat(file); + return Result.success(ResultCode.SUCCESS, "文件上传成功", url); + } + /** * 获取聊天记录 * @param targetUserId 目标用户ID diff --git a/src/main/java/com/bao/dating/service/ChatService.java b/src/main/java/com/bao/dating/service/ChatService.java index 9b47425..5a7dc28 100644 --- a/src/main/java/com/bao/dating/service/ChatService.java +++ b/src/main/java/com/bao/dating/service/ChatService.java @@ -4,6 +4,7 @@ import com.bao.dating.common.result.PageResult; import com.bao.dating.pojo.dto.*; import com.bao.dating.pojo.vo.ChatRecordsVO; import com.bao.dating.pojo.vo.ChatSessionsVO; +import org.springframework.web.multipart.MultipartFile; import java.time.LocalDateTime; import java.util.List; @@ -21,6 +22,13 @@ public interface ChatService { */ ChatRecordsVO createSession(Long senderUserId, ChatRecordSendDTO dto); + /** + * 上传媒体文件 + * @param file 文件 + * @return 文件URL列表 + */ + String uploadChat(MultipartFile file); + /** * 获取聊天记录 * @param dto 查询参数 diff --git a/src/main/java/com/bao/dating/service/impl/ChatServiceImpl.java b/src/main/java/com/bao/dating/service/impl/ChatServiceImpl.java index 93e5f0e..bdfa589 100644 --- a/src/main/java/com/bao/dating/service/impl/ChatServiceImpl.java +++ b/src/main/java/com/bao/dating/service/impl/ChatServiceImpl.java @@ -1,5 +1,8 @@ package com.bao.dating.service.impl; +import com.bao.dating.common.aliyun.AliOssUtil; +import com.bao.dating.common.result.AliOssResult; +import com.bao.dating.context.UserContext; import com.bao.dating.mapper.ChatRecordsMapper; import com.bao.dating.mapper.ChatSessionsMapper; import com.bao.dating.pojo.dto.*; @@ -9,15 +12,22 @@ import com.bao.dating.pojo.vo.ChatRecordsVO; import com.bao.dating.pojo.vo.ChatSessionsVO; import com.bao.dating.service.ChatService; import com.bao.dating.service.UserService; +import com.bao.dating.util.FileUtil; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.time.LocalDate; import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; +import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.UUID; import java.util.stream.Collectors; @@ -34,6 +44,9 @@ public class ChatServiceImpl implements ChatService { @Autowired private ChatSessionsMapper chatSessionsMapper; + @Autowired + private AliOssUtil ossUtil; + @Autowired private UserService userService; @@ -112,6 +125,49 @@ public class ChatServiceImpl implements ChatService { return vo; } + /** + * 上传媒体文件 + * @return 上传后的文件URL + */ + @Override + public String uploadChat(MultipartFile file) { + // 参数校验 + if (file == null || file.isEmpty()) { + throw new RuntimeException("文件不存在"); + } + + String originalFilename = file.getOriginalFilename(); + if (originalFilename == null) { + throw new RuntimeException("文件名非法"); + } + + String fileType = FileUtil.getFileType(originalFilename); + // 仅支持图片和视频文件上传 + if (!AliOssResult.IMAGE.equals(fileType) && !AliOssResult.VIDEO.equals(fileType)) { + throw new RuntimeException("仅支持图片和视频文件上传"); + } + + //生成 OSS 路径 + String extension = FileUtil.getFileExtension(originalFilename); + String fileName = UUID.randomUUID().toString().replace("-", "") + "." + extension; + Long userId = UserContext.getUserId(); + String objectKey = "chat/" + userId + "/" + fileName; + + try { + byte[] fileBytes = file.getBytes(); + String ossUrl = ossUtil.upload(fileBytes, objectKey); + + if (ossUrl == null || ossUrl.isEmpty()) { + throw new RuntimeException("图片上传失败"); + } + + return ossUrl; + + } catch (Exception e) { + throw new RuntimeException("上传图片失败", e); + } + } + /** * 获取聊天记录 * @return 聊天记录列表