2016-09-15 10 views
3

私はhttp:ファイルサーバーを使って、私のテンプレートであるsrcをmp3ファイルのディレクトリとして提供しています。ただし、応答にはaudio/mpegの代わりにContent-Typetext/htmlが使用されます。 FileServerが応答するMIMEタイプを設定するには、この質問Setting the 'charset' property on the Content-Type header in the golang HTTP FileServerを見ましたが、MIMEタイプをオーバーライドする方法がまだわかりません。間違ったMIMEを持つhttp.FileServerの応答 "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

それは、コンテンツタイプの問題ではありません。あなたのfsハンドラは、mp3を要求したときに呼び出されていません。あなたは理由がnet/http.ServeMux

パターンのドキュメントにあるこの

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

のようなあなたのパターン/mediaとストリップ接頭辞に/を追加する必要が/favicon.ico」などの固定、根ざしたパスを、名前を付けます"、またはルートサブツリー のように"/images/"(末尾のスラッシュに注意してください)。後者のハンドラは、 "/ images /"と "/ images/thumbnails /"の両方に登録されているハンドラがある場合は、 "/ images/thumbnails /"から始まるパス に対して呼び出されるように、長いパターンは短いパターンよりも優先して になります。前者は "/ images /"サブツリーの他のパスについては という要求を受け取ります。ちょうど/mediaあなたはパスのためではなく、末尾にハンドラを登録していると

はそれrooted subtree考慮スラッシュとそのツリーの下でリクエストを処理します。

関連する問題