录音管理功能联调

This commit is contained in:
spllzh
2025-10-25 23:07:07 +08:00
parent 6801f06db5
commit c14476dc92
34 changed files with 1254 additions and 58 deletions

View File

@@ -3,6 +3,7 @@ package com.rj.service.impl;
import com.rj.entity.AudioManagement;
import com.rj.service.IFileUploadService;
import com.rj.service.IAudioManagementService;
import com.rj.service.MinIOService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@@ -32,6 +33,9 @@ public class FileUploadServiceImpl implements IFileUploadService {
@Autowired
private IAudioManagementService audioManagementService;
@Autowired
private MinIOService minIOService;
@Value("${app.audio.upload.path:uploads/audio}")
private String uploadPath;
@@ -74,31 +78,39 @@ public class FileUploadServiceImpl implements IFileUploadService {
return result;
}
// 创建上传目录
Path uploadDir = Paths.get(uploadPath);
if (!Files.exists(uploadDir)) {
Files.createDirectories(uploadDir);
// 直接上传到MinIO不保存到本地
log.info("开始上传文件到MinIO...");
String fileUrl = minIOService.uploadFile(file);
log.info("文件上传成功URL: {}", fileUrl);
// 获取录音记录并更新
AudioManagement audio = audioManagementService.getById(audioId);
if (audio != null) {
// 更新录音记录的文件信息
String fileExtension = getFileExtension(originalFilename);
audio.setAudioFileUrl(fileUrl);
audio.setAudioFileSize(file.getSize());
audio.setAudioFileOriginalName(originalFilename);
audio.setAudioFileExtension(fileExtension);
audio.setUploadTime(java.time.LocalDateTime.now());
audio.setUpdateTime(java.time.LocalDateTime.now());
// 保存更新
audioManagementService.updateById(audio);
log.info("录音记录更新成功audioId={}", audioId);
} else {
log.warn("未找到对应的录音记录audioId={}", audioId);
}
// 生成文件名
String fileExtension = getFileExtension(originalFilename);
String fileName = audioId+"_"+UUID.randomUUID() + "." + fileExtension;
Path filePath = uploadDir.resolve(fileName);
// 保存文件
Files.copy(file.getInputStream(), filePath);
// 生成访问URL
String fileUrl = accessUrl + fileName;
result.put("success", true);
result.put("message", "文件上传成功");
result.put("fileName", fileName);
result.put("fileUrl", fileUrl);
result.put("fileSize", file.getSize());
result.put("originalName", originalFilename);
log.info("音频文件上传成功audioId={}, fileName={}, size={}", audioId, fileName, file.getSize());
log.info("音频文件上传成功audioId={}, minioUrl={}, size={}", audioId, fileUrl, file.getSize());
} catch (Exception e) {
log.error("音频文件上传失败audioId={}, error={}", audioId, e.getMessage(), e);
@@ -240,6 +252,55 @@ public class FileUploadServiceImpl implements IFileUploadService {
return files != null && files.length > 0;
}
@Override
public Map<String, Object> uploadAudioFileToMinIO(MultipartFile file, String audioId) throws IOException {
Map<String, Object> result = new HashMap<>();
try {
// 验证文件
if (file == null || file.isEmpty()) {
result.put("success", false);
result.put("message", "文件不能为空");
return result;
}
// 验证文件大小
long maxSize = parseFileSize(maxFileSize);
if (file.getSize() > maxSize) {
result.put("success", false);
result.put("message", "文件大小超过限制,最大允许 " + maxFileSize);
return result;
}
// 验证文件格式
String originalFilename = file.getOriginalFilename();
if (!isValidAudioFormat(originalFilename)) {
result.put("success", false);
result.put("message", "不支持的音频格式,支持的格式:" + String.join(", ", SUPPORTED_AUDIO_FORMATS));
return result;
}
// 使用MinIO上传文件
String minioUrl = minIOService.uploadFile(file);
result.put("success", true);
result.put("message", "文件上传到MinIO成功");
result.put("fileUrl", minioUrl);
result.put("fileSize", file.getSize());
result.put("originalName", originalFilename);
result.put("audioId", audioId);
log.info("音频文件上传到MinIO成功audioId={}, minioUrl={}, size={}", audioId, minioUrl, file.getSize());
} catch (Exception e) {
log.error("音频文件上传到MinIO失败audioId={}, error={}", audioId, e.getMessage(), e);
result.put("success", false);
result.put("message", "文件上传到MinIO失败" + e.getMessage());
}
return result;
}
/**
* 验证音频文件格式
*/