diff --git a/utils/http.go b/utils/http.go index 02498aede3..fe394f518a 100644 --- a/utils/http.go +++ b/utils/http.go @@ -5,6 +5,7 @@ package utils import ( + "mime" "strings" ) @@ -15,16 +16,25 @@ func GetMIME(extension string) string { if len(extension) == 0 { return "" } - var mime string + var foundMime string if extension[0] == '.' { - mime = mimeExtensions[extension[1:]] + foundMime = mimeExtensions[extension[1:]] } else { - mime = mimeExtensions[extension] + foundMime = mimeExtensions[extension] } - if len(mime) == 0 { - return MIMEOctetStream + + if len(foundMime) == 0 { + if extension[0] != '.' { + foundMime = mime.TypeByExtension("." + extension) + } else { + foundMime = mime.TypeByExtension(extension) + } + + if foundMime == "" { + return MIMEOctetStream + } } - return mime + return foundMime } // ParseVendorSpecificContentType check if content type is vendor specific and diff --git a/utils/http_test.go b/utils/http_test.go index 2abe6c51a4..56a6029639 100644 --- a/utils/http_test.go +++ b/utils/http_test.go @@ -23,6 +23,14 @@ func Test_GetMIME(t *testing.T) { res = GetMIME("unknown") AssertEqual(t, MIMEOctetStream, res) + + err := mime.AddExtensionType(".mjs", "application/javascript") + if err == nil { + res = GetMIME(".mjs") + AssertEqual(t, "application/javascript", res) + } + AssertEqual(t, nil, err) + // empty case res = GetMIME("") AssertEqual(t, "", res)