http.FileServer响应错误的mime" Content-Type"

时间:2016-09-15 20:43:21

标签: javascript go content-type mime fileserver

我使用http.FileServer来提供mp3文件的目录,我的模板然后在javascript中src。但是,回复使用Content-Type text/html代替audio/mpeg。如何设置FileServer响应的mime类型,我看到了这个问题Setting the 'charset' property on the Content-Type header in the golang HTTP FileServer,但我还是不确定如何覆盖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.

1 个答案:

答案 0 :(得分:2)

这不是内容类型的问题。当你请求mp3时,你的fs处理程序没有被调用。您需要在模式/中添加/media,并像这样添加条带前缀

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

原因在于net/http.ServeMux

的文档
  

模式名称固定,有根路径,如“/favicon.ico”或带根子树,   比如“/ images /”(注意斜杠)。较长的模式优先   在较短的情况下,如果有两个处理程序注册   “/ images /”和“/ images / thumbnails /”,将调用后一个处理程序   路径以“/ images / thumbnails /”开头,前者将收到请求   对于“/ images /”子树中的任何其他路径。

只有/media你正在注册一个路径的处理程序但是有一个尾部斜杠,它认为它是rooted subtree并且将在该树下提供请求。