2013-05-21 2 views
12

私はhttp://example.go:8080/imageに行くと、静的な画像を返します。 私はhereを見つけた例に従っています。この例では、彼らは、このメソッドを実装:go-lang simple webserver:静止画像を配信

func handler(w http.ResponseWriter, r *http.Request) { 
    fmt.Fprintf(w, "Hi there, I love %s!", r.URL.Path[1:]) 
} 

をして、ここでそれを参照してください。

... 
... 
http.HandleFunc("/", handler) 

を今、私は何をしたいと、代わりに文字列への書き込みの画像を提供しています。 どうすればいいですか?

答えて

21

http.FileServer機能を使用して静的ファイルを提供することができます。

package main 

import (
    "log" 
    "net/http" 
) 

func main() { 
    http.Handle("/", http.StripPrefix("/", http.FileServer(http.Dir("path/to/file")))) 
    if err := http.ListenAndServe(":8080", nil); err != nil { 
     log.Fatal("ListenAndServe: ", err) 
    } 
} 

編集:さらにidiomaticコード。

EDIT 2:ブラウザがここにhttp://example.go/image.png

http.StripPrefix機能を要求する処理されパスがウェブルートであり、この場合には、厳密には不要である場合、このコードは、上記画像image.pngを返します。画像がhttp://example.go/images/image.pngのパスから配信される場合は、上記の行はhttp.Handle("/images/", http.StripPrefix("/images/", http.FileServer(http.Dir("path/to/file"))))である必要があります。

​​

+0

ありがとうございます! StripPrefixとFileServerが何を意味し、このコンテキストで使用されているかについての言葉をいくつか追加できますか? – levtatarov

+1

この場合、Webサーバーのルートから提供しているので、StripPrefixは実際には必要ありません。別のパスからサーバーを使用する場合は、本当に必要です。 http://golang.org/pkg/net/http/#StripPrefixとhttp://golang.org/pkg/net/http/#FileServerをご覧ください。 – Intermernet