diff --git a/music-houduan/pom.xml b/music-houduan/pom.xml index b053430..c849560 100644 --- a/music-houduan/pom.xml +++ b/music-houduan/pom.xml @@ -33,12 +33,12 @@ - - org.springframework.boot - spring-boot-devtools - runtime - true - + + + + + + @@ -123,6 +123,13 @@ knife4j-openapi3-jakarta-spring-boot-starter 4.5.0 + + + + org + jaudiotagger + 2.0.3 + @@ -142,4 +149,4 @@ - \ No newline at end of file + diff --git a/music-houduan/src/main/java/com/test/musichouduan/service/FileService.java b/music-houduan/src/main/java/com/test/musichouduan/service/FileService.java index deaea78..c8f8d61 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/service/FileService.java +++ b/music-houduan/src/main/java/com/test/musichouduan/service/FileService.java @@ -38,4 +38,12 @@ public interface FileService { * @return 是否成功 */ boolean deleteFile(String url); + + /** + * 获取音乐时长 + * + * @param file 音乐文件 + * @return 时长(秒) + */ + int getMusicDuration(MultipartFile file); } diff --git a/music-houduan/src/main/java/com/test/musichouduan/service/impl/FileServiceImpl.java b/music-houduan/src/main/java/com/test/musichouduan/service/impl/FileServiceImpl.java index 95bdf55..e9dcf89 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/service/impl/FileServiceImpl.java +++ b/music-houduan/src/main/java/com/test/musichouduan/service/impl/FileServiceImpl.java @@ -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) { // 检查文件是否为空 diff --git a/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java b/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java index e30547e..0931965 100644 --- a/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java +++ b/music-houduan/src/main/java/com/test/musichouduan/service/impl/MusicServiceImpl.java @@ -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); // 设置歌词 diff --git a/music-houduan/src/main/resources/application.properties b/music-houduan/src/main/resources/application.properties deleted file mode 100644 index 826b3fa..0000000 --- a/music-houduan/src/main/resources/application.properties +++ /dev/null @@ -1,26 +0,0 @@ -#spring.application.name=music-houduan -#server.port=8085 -# -#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/music_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai -#spring.datasource.username=root -#spring.datasource.password=123456 -#spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver -# -#spring.jpa.hibernate.ddl-auto=update -#spring.jpa.show-sql=true -# -#spring.data.redis.host=127.0.0.1 -#spring.data.redis.port=6379 -#spring.data.redis.password=123456 -# -#sa-token.token-name=satoken -#sa-token.timeout=2592000 -#sa-token.is-concurrent=true -#sa-token.is-share=true -#sa-token.token-style=uuid -# -## 文件上传配置 -#file.upload-path=./upload/ -#project.root-path=. -#file.access-path=/upload/ -#file.allowed-types=jpg,jpeg,png,gif,mp3,wav,lrc,txt \ No newline at end of file