2016-09-15 32 views
3

我使用http.FileServer服務的MP3文件的目錄,其中我的模板,然後在JavaScript中的src。但是,響應使用Content-Typetext/html而不是audio/mpeg。如何設置FileServer響應的MIME類型,我看到這個問題Setting the 'charset' property on the Content-Type header in the golang HTTP FileServer,但我仍然不確定如何覆蓋MIME類型。http.FileServer與錯誤的MIME「Content-Type」的響應

我的代碼如下所示:

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. 

回答

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,將成爲在此樹下的請求。