From e9cf2af5c496bde2355c7828d9e5d786b7bf3e0b Mon Sep 17 00:00:00 2001 From: zhaojun1998 Date: Sun, 8 Sep 2019 21:06:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=9F=B3=E4=B9=90=E5=B0=81?= =?UTF-8?q?=E9=9D=A2,=20=E6=AD=8C=E6=89=8B,=20=E4=B8=93=E8=BE=91=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E7=9A=84=E8=8E=B7=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zhaojun/common/service/FileService.java | 30 +++-------- .../im/zhaojun/common/util/AudioHelper.java | 53 +++++++++++++++++++ .../zhaojun/local/service/LocalService.java | 25 --------- 3 files changed, 60 insertions(+), 48 deletions(-) create mode 100644 src/main/java/im/zhaojun/common/util/AudioHelper.java diff --git a/src/main/java/im/zhaojun/common/service/FileService.java b/src/main/java/im/zhaojun/common/service/FileService.java index bb96a7a..d8bbca8 100644 --- a/src/main/java/im/zhaojun/common/service/FileService.java +++ b/src/main/java/im/zhaojun/common/service/FileService.java @@ -93,32 +93,16 @@ public interface FileService { } default AudioInfo getAudioInfo(String url) throws Exception { -// String query = new URL(URLUtil.decode(url)).getQuery(); -// url = url.replace(query, URLUtil.encode(query)); + String query = new URL(URLUtil.decode(url)).getQuery(); + + if (query != null) { + url = url.replace(query, URLUtil.encode(query)); + } + File file = new File(System.getProperty("user.home") + "/zfile/tmp/audio/" + UUID.fastUUID()); FileUtil.mkParentDirs(file); HttpUtil.downloadFile(url, file); - Mp3File mp3file = new Mp3File(file); - ID3v1 audioTag = null; - AudioInfo audioInfo = new AudioInfo(); - - if (mp3file.hasId3v1Tag()) { - audioTag = mp3file.getId3v1Tag(); - audioInfo.setCover("/shikwasa/audio.png"); - } else if (mp3file.hasId3v2Tag()) { - ID3v2 id3v2Tag = mp3file.getId3v2Tag(); - audioInfo.setCover("data:" + id3v2Tag.getAlbumImageMimeType() + ";base64," + Base64.encode(id3v2Tag.getAlbumImage())); - audioTag = id3v2Tag; - } else { - } - - if (audioTag == null) { - audioInfo.setTitle("未知歌曲"); - audioInfo.setArtist("未知"); - } else { - audioInfo.setTitle(audioTag.getTitle()); - audioInfo.setArtist(audioTag.getArtist()); - } + AudioInfo audioInfo = AudioHelper.parseAudioInfo(file); audioInfo.setSrc(url); file.deleteOnExit(); return audioInfo; diff --git a/src/main/java/im/zhaojun/common/util/AudioHelper.java b/src/main/java/im/zhaojun/common/util/AudioHelper.java new file mode 100644 index 0000000..ff54bd8 --- /dev/null +++ b/src/main/java/im/zhaojun/common/util/AudioHelper.java @@ -0,0 +1,53 @@ +package im.zhaojun.common.util; + +import cn.hutool.core.codec.Base64; +import com.mpatric.mp3agic.*; +import im.zhaojun.common.model.AudioInfo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.File; +import java.io.IOException; + +public class AudioHelper { + + private static final Logger log = LoggerFactory.getLogger(AudioHelper.class); + + public static AudioInfo parseAudioInfo(File file) throws InvalidDataException, IOException, UnsupportedTagException { + AudioInfo audioInfo = new AudioInfo(); + audioInfo.setTitle("未知歌曲"); + audioInfo.setArtist("未知"); + audioInfo.setCover("/shikwasa/audio.png"); + + Mp3File mp3File = null; + try { + mp3File = new Mp3File(file); + } catch (InvalidDataException e) { + if (log.isDebugEnabled()) { + log.debug("无法解析的音频文件."); + } + } + + if (mp3File == null) { + return audioInfo; + } + + ID3v1 audioTag = null; + + if (mp3File.hasId3v2Tag()) { + ID3v2 id3v2Tag = mp3File.getId3v2Tag(); + byte[] albumImage = id3v2Tag.getAlbumImage(); + if (albumImage != null) { + audioInfo.setCover("data:" + id3v2Tag.getAlbumImageMimeType() + ";base64," + Base64.encode(albumImage)); + } + audioTag = id3v2Tag; + } + + if (audioTag != null) { + audioInfo.setTitle(audioTag.getTitle()); + audioInfo.setArtist(audioTag.getArtist()); + } + + return audioInfo; + } +} diff --git a/src/main/java/im/zhaojun/local/service/LocalService.java b/src/main/java/im/zhaojun/local/service/LocalService.java index 9031ef9..54903f0 100644 --- a/src/main/java/im/zhaojun/local/service/LocalService.java +++ b/src/main/java/im/zhaojun/local/service/LocalService.java @@ -1,15 +1,9 @@ package im.zhaojun.local.service; -import cn.hutool.core.codec.Base64; import cn.hutool.core.io.FileUtil; -import cn.hutool.core.lang.UUID; import cn.hutool.core.util.URLUtil; -import cn.hutool.http.HttpUtil; -import com.mpatric.mp3agic.ID3v2; -import com.mpatric.mp3agic.Mp3File; import im.zhaojun.common.enums.FileTypeEnum; import im.zhaojun.common.enums.StorageTypeEnum; -import im.zhaojun.common.model.AudioInfo; import im.zhaojun.common.model.FileItem; import im.zhaojun.common.model.ImageInfo; import im.zhaojun.common.model.StorageConfig; @@ -102,25 +96,6 @@ public class LocalService implements FileService { return FileUtil.readUtf8String(StringUtils.concatPath(filePath, URLUtil.decode(path))); } - @Override - public AudioInfo getAudioInfo(String url) throws Exception { - String query = new URL(URLUtil.decode(url)).getQuery(); - url = url.replace(query, URLUtil.encode(query)); - File file = new File(System.getProperty("user.home") + "/zfile/tmp/audio/" + UUID.fastUUID()); - FileUtil.mkParentDirs(file); - HttpUtil.downloadFile(url, file); - Mp3File mp3file = new Mp3File(file); - ID3v2 audioTag = mp3file.getId3v2Tag(); - String imageMimeType = audioTag.getAlbumImageMimeType(); - AudioInfo audioInfo = new AudioInfo(); - audioInfo.setArtist(audioTag.getArtist()); - audioInfo.setTitle(audioTag.getTitle()); - audioInfo.setCover("data:" + imageMimeType + ";base64," + Base64.encode(audioTag.getAlbumImage())); - audioInfo.setSrc(url); - file.deleteOnExit(); - return audioInfo; - } - public String getFilePath() { return filePath; }