一尘不染

错误的MIME“ Content-Type”的http.FileServer响应

go

我正在使用http.FileServer来提供mp3文件的目录,该模板随后src在javascript中。但是,该响应使用Content-Type
text/html代替audio/mpeg。我如何设置FileServer响应的mime类型,我看到了这个问题在golang HTTPFileServer的Content-Type标头上设置了’charset’属性,但是我仍然不确定如何覆盖mime类型。

我的代码如下所示:

fs := http.FileServer(http.Dir(dir))
http.Handle("/media", http.StripPrefix("/media", fs))
http.HandleFunc("/", p.playlistHandler)
http.ListenAndServe(":5177", nil)

我得到的错误是:

HTTP "Content-Type" of "text/html" is not supported. Load of media resource http://localhost:5177/media/sample1.mp3 failed.

阅读 220

收藏
2020-07-02

共1个答案

一尘不染

这不是内容类型的问题。fs请求mp3时不会调用您的处理程序。您需要像这样/在图案/media和带状前缀中添加一个

http.Handle("/media/", http.StripPrefix("/media/", fs))

原因是在net /
http.ServeMux
的文档中

模式命名固定的,有根的路径(例如“ /favicon.ico”)或有根的子树(例如“ / images
/”)(请注意结尾的斜杠)。较长的模式优先于较短的模式,因此,如果同时为“ / images /”和“ / images / thumbnails
/”注册了处理程序,则将为以“ / images / thumbnails /”开头的路径调用后一个处理程序将在“ / images
/”子树中接收对任何其他路径的请求。

只需/media为路径注册处理程序,但在其后加上斜杠,它将视为a rooted subtree,并将在该树下处理请求。

2020-07-02