mirror of
https://github.com/zfile-dev/zfile.git
synced 2025-04-19 05:34:52 +00:00
优化音乐封面, 歌手, 专辑信息的获取
This commit is contained in:
@@ -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;
|
||||
|
||||
53
src/main/java/im/zhaojun/common/util/AudioHelper.java
Normal file
53
src/main/java/im/zhaojun/common/util/AudioHelper.java
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user