feat(music): 添加音乐时长获取功能

- 在 FileService接口中添加 getMusicDuration 方法- 在 FileServiceImpl 类中实现音乐时长获取逻辑
- 在 MusicServiceImpl 中使用该功能来设置音乐时长
- 移除 application.properties 中的注释内容
- 添加 jaudiotagger 依赖用于获取音乐文件信息
This commit is contained in:
ikmkj
2025-07-26 09:40:17 +08:00
parent ea48c39560
commit 4deaf59123
5 changed files with 55 additions and 33 deletions

View File

@@ -38,4 +38,12 @@ public interface FileService {
* @return 是否成功
*/
boolean deleteFile(String url);
/**
* 获取音乐时长
*
* @param file 音乐文件
* @return 时长(秒)
*/
int getMusicDuration(MultipartFile file);
}

View File

@@ -3,6 +3,8 @@ package com.test.musichouduan.service.impl;
import com.test.musichouduan.dto.Result;
import com.test.musichouduan.exception.BusinessException;
import com.test.musichouduan.service.FileService;
import org.jaudiotagger.audio.AudioFile;
import org.jaudiotagger.audio.AudioFileIO;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
@@ -75,6 +77,33 @@ public class FileServiceImpl implements FileService {
return uploadFile(file, "musics");
}
@Override
public int getMusicDuration(MultipartFile file) {
if (file == null || file.isEmpty()) {
return 0;
}
File tempFile = null;
try {
byte[] bytes = file.getBytes();
// 使用原始文件扩展名创建临时文件
String originalFilename = file.getOriginalFilename();
String extension = getFileExtension(originalFilename);
tempFile = File.createTempFile("music-duration-", "." + extension);
Files.write(tempFile.toPath(), bytes);
AudioFile audioFile = AudioFileIO.read(tempFile);
int duration = audioFile.getAudioHeader().getTrackLength();
return duration;
} catch (Exception e) {
logger.error("获取音乐时长失败", e);
return 0;
} finally {
if (tempFile != null) {
tempFile.delete();
}
}
}
@Override
public String uploadLyric(MultipartFile file) {
// 检查文件是否为空

View File

@@ -283,6 +283,9 @@ public class MusicServiceImpl implements MusicService {
@Override
@Transactional
public MusicDTO addMusic(MusicDTO musicDTO, MultipartFile file, MultipartFile cover) {
// 获取音乐时长
int duration = fileService.getMusicDuration(file);
// 上传音乐文件
String musicUrl = fileService.uploadMusic(file);
@@ -294,6 +297,7 @@ public class MusicServiceImpl implements MusicService {
BeanUtils.copyProperties(musicDTO, music);
music.setUrl(musicUrl);
music.setCover(coverUrl);
music.setDuration(duration);
music.setPlayCount(0L);
// 设置歌词