add load mp3

This commit is contained in:
2026-09-06 03:09:33 +07:00
parent 24f8b31fea
commit 106d2830fa
3 changed files with 12 additions and 0 deletions
+10
View File
@@ -96,6 +96,9 @@ func (s *FileService) UploadFile(
// Категория по содержимому (сырой sniff): text/* и octet-stream не
// проходят вообще, расширение должно соответствовать категории.
sniffed := http.DetectContentType(data)
if ext == ".mp3" && isMP3(data) {
sniffed = "audio/mpeg"
}
fileType := contentTypeCategory(sniffed)
if fileType == "" || fileType != file_storage.FileType(filename) {
return "", "", ErrInvalidContentType
@@ -117,6 +120,13 @@ func (s *FileService) UploadFile(
return storedName, fileType, nil
}
// isMP3 распознаёт MP3 без необязательного ID3-тега по заголовку MPEG-фрейма.
func isMP3(data []byte) bool {
return len(data) >= 4 && data[0] == 0xff && data[1]&0xe0 == 0xe0 &&
data[1]&0x18 != 0x08 && data[1]&0x06 != 0 &&
data[2]&0xf0 != 0 && data[2]&0xf0 != 0xf0 && data[2]&0x0c != 0x0c
}
// contentTypeCategory возвращает категорию по sniffed-типу:
// application/pdf → pdf; image/* → image; audio/* и application/ogg → audio;
// всё остальное (text/*, application/octet-stream и пр.) → "".