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