I'm using http.FileServer to serve a directory of mp3 files, which my template then src
in javascript. The response, however, uses the Content-Type
text/html
instead of audio/mpeg
. How do I set the mime type which the FileServer responds with, I saw this question Setting the 'charset' property on the Content-Type header in the golang HTTP FileServer , but I'm still not sure how to override the mime type.
My code looks like the following:
fs := http.FileServer(http.Dir(dir))
http.Handle("/media", http.StripPrefix("/media", fs))
http.HandleFunc("/", p.playlistHandler)
http.ListenAndServe(":5177", nil)
and the error I get is:
HTTP "Content-Type" of "text/html" is not supported. Load of media resource http://localhost:5177/media/sample1.mp3 failed.
In the Connections pane, go to the site, application, or directory for which you want to add a MIME type. In the Home pane, double-click MIME Types. In the MIME Types pane, click Add... in the Actions pane. In the Add MIME Type dialog box, add the file name extension and MIME type, and then click OK.
MIME stands for "Multipurpose Internet Mail Extensions. It's a way of identifying files on the Internet according to their nature and format. For example, using the "Content-type" header value defined in a HTTP response, the browser can open the file with the proper extension/plugin.
The Content-Type header is used to indicate the media type of the resource. The media type is a string sent along with the file indicating the format of the file. For example, for image file its media type will be like image/png or image/jpg, etc. In response, it tells about the type of returned content, to the client.
It's not a problem of content types. Your fs
handler isn't getting called when you request the mp3. You need to add a /
to your pattern /media
and the strip prefix like this
http.Handle("/media/", http.StripPrefix("/media/", fs))
The reason is in the documentation of net/http.ServeMux
Patterns name fixed, rooted paths, like "/favicon.ico", or rooted subtrees, like "/images/" (note the trailing slash). Longer patterns take precedence over shorter ones, so that if there are handlers registered for both "/images/" and "/images/thumbnails/", the latter handler will be called for paths beginning "/images/thumbnails/" and the former will receive requests for any other paths in the "/images/" subtree.
With just /media
you're registering a handler for a path but with a trailing slash it considers it a rooted subtree
and will serve requests under that tree.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With