3

http パッケージに組み込みの ServeFile メソッドがあることに気付く前に、静的ハンドラーを多かれ少なかれ次のように実装しました。

func StaticHandler(w http.ResponseWriter, r *http.Request) {
    filename := mux.Vars(r)["static"] // using gorilla/mux
    f, err := os.Open(fmt.Sprintf("%v/static/%v", webroot, filename))

    if err != nil {
        http.NotFound(w, r)
        return
    }

    defer f.Close()

    io.Copy(w, f)
}

たとえば、スタイル シートと画像を次のようにリンクしました。

<img href="/image.jpg" />
<link rel="stylesheet" type="text/css" href="/stylesheet.css">

リンクされたスタイルシートがブラウザによって適用されていませんでした (Chrome、Firefox、Midori でテスト済み)。スタイルシートを提供でき (MYSITE/stylesheet.css にアクセスすると css プレーンテキストが表示されます)、画像はページに正常に読み込まれますが、どのページにもスタイルがありません。

理由についてのアイデアはありますか?

4

1 に答える 1

5

簡単な答え: ヘッダーが間違っていました。

Go は html、jpg、および png の正しいヘッダーを提供しますが、css (および js) ファイルは「text/css」および「text/javascript」ではなく「text/plain」のままになります。

Go sourceは、処理が呼び出されていることを示していると思います。

とにかく、次の方法でコンテンツタイプを設定します。

w.Header().Set("Content-Type", "text/css; charset=utf-8")

トリックをしました。

于 2013-10-30T18:54:54.950 に答える