From 8f719c2a324cd317c12248362d178432af5d33f1 Mon Sep 17 00:00:00 2001 From: Yared Yemane Date: Wed, 25 Mar 2026 06:29:23 -0700 Subject: [PATCH] .mp3 upload fix --- internal/web_server/handlers/file_handler.go | 22 ++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/internal/web_server/handlers/file_handler.go b/internal/web_server/handlers/file_handler.go index b5a5055..249bd72 100644 --- a/internal/web_server/handlers/file_handler.go +++ b/internal/web_server/handlers/file_handler.go @@ -156,6 +156,28 @@ func (h *Handler) UploadMedia(c *fiber.Ctx) error { "audio/aac": true, "audio/webm": true, "video/ogg": true, "video/webm": true, "audio/x-wav": true, "audio/x-m4a": true, "audio/flac": true, } + // DetectContentType can return "application/octet-stream" for some files (often via clients + // like Postman). If that happens, fall back to extension-based detection. + if contentType == "application/octet-stream" { + filenameLower := strings.ToLower(fileHeader.Filename) + lastDot := strings.LastIndex(filenameLower, ".") + ext := "" + if lastDot != -1 && lastDot+1 < len(filenameLower) { + ext = filenameLower[lastDot+1:] + } + extMap := map[string]string{ + "mp3": "audio/mpeg", + "wav": "audio/wav", + "ogg": "audio/ogg", + "m4a": "audio/mp4", + "aac": "audio/aac", + "webm": "audio/webm", + "flac": "audio/flac", + } + if ct, ok := extMap[ext]; ok { + contentType = ct + } + } if !allowedAudio[contentType] { return c.Status(fiber.StatusBadRequest).JSON(domain.ErrorResponse{ Message: "Invalid file type",