完成聊天文件上传OSS
This commit is contained in:
@@ -11,6 +11,7 @@ import com.bao.dating.service.ChatService;
|
|||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@@ -25,6 +26,17 @@ public class ChatController {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ChatService chatService;
|
private ChatService chatService;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传文件
|
||||||
|
* @param file 文件
|
||||||
|
* @return 文件URL
|
||||||
|
*/
|
||||||
|
@PostMapping("/upload")
|
||||||
|
public Result<String> uploadVideo(@RequestParam MultipartFile file) {
|
||||||
|
String url = chatService.uploadChat(file);
|
||||||
|
return Result.success(ResultCode.SUCCESS, "文件上传成功", url);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取聊天记录
|
* 获取聊天记录
|
||||||
* @param targetUserId 目标用户ID
|
* @param targetUserId 目标用户ID
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import com.bao.dating.common.result.PageResult;
|
|||||||
import com.bao.dating.pojo.dto.*;
|
import com.bao.dating.pojo.dto.*;
|
||||||
import com.bao.dating.pojo.vo.ChatRecordsVO;
|
import com.bao.dating.pojo.vo.ChatRecordsVO;
|
||||||
import com.bao.dating.pojo.vo.ChatSessionsVO;
|
import com.bao.dating.pojo.vo.ChatSessionsVO;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@@ -21,6 +22,13 @@ public interface ChatService {
|
|||||||
*/
|
*/
|
||||||
ChatRecordsVO createSession(Long senderUserId, ChatRecordSendDTO dto);
|
ChatRecordsVO createSession(Long senderUserId, ChatRecordSendDTO dto);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 上传媒体文件
|
||||||
|
* @param file 文件
|
||||||
|
* @return 文件URL列表
|
||||||
|
*/
|
||||||
|
String uploadChat(MultipartFile file);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取聊天记录
|
* 获取聊天记录
|
||||||
* @param dto 查询参数
|
* @param dto 查询参数
|
||||||
|
|||||||
@@ -1,5 +1,8 @@
|
|||||||
package com.bao.dating.service.impl;
|
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.ChatRecordsMapper;
|
||||||
import com.bao.dating.mapper.ChatSessionsMapper;
|
import com.bao.dating.mapper.ChatSessionsMapper;
|
||||||
import com.bao.dating.pojo.dto.*;
|
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.pojo.vo.ChatSessionsVO;
|
||||||
import com.bao.dating.service.ChatService;
|
import com.bao.dating.service.ChatService;
|
||||||
import com.bao.dating.service.UserService;
|
import com.bao.dating.service.UserService;
|
||||||
|
import com.bao.dating.util.FileUtil;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.beans.BeanUtils;
|
import org.springframework.beans.BeanUtils;
|
||||||
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.transaction.annotation.Transactional;
|
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.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.UUID;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
|
||||||
@@ -34,6 +44,9 @@ public class ChatServiceImpl implements ChatService {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private ChatSessionsMapper chatSessionsMapper;
|
private ChatSessionsMapper chatSessionsMapper;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private AliOssUtil ossUtil;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private UserService userService;
|
private UserService userService;
|
||||||
|
|
||||||
@@ -112,6 +125,49 @@ public class ChatServiceImpl implements ChatService {
|
|||||||
return vo;
|
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 聊天记录列表
|
* @return 聊天记录列表
|
||||||
|
|||||||
Reference in New Issue
Block a user