generated from VLADIMIR/template
add load mp3
This commit is contained in:
@@ -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 и пр.) → "".
|
||||
|
||||
Reference in New Issue
Block a user