2013-05-21 4 views
12

다음과 같은 간단한 웹 서버를 작성하고 싶습니다. http://example.go:8080/image으로 이동하면 정적 이미지가 반환됩니다. 예를 들어 내가 찾은 바에는 here입니다. 이 예제에서는 그들은이 방법을 구현 :go-lang 간단한 웹 서버 : 정적 이미지 제공

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 코드입니다.

편집 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"))))이어야합니다.

Playground

+0

감사합니다. StripPrefix와 FileServer가 의미하는 것과이 컨텍스트에서 사용 된 것에 대한 몇 가지 단어를 추가 할 수 있습니까? – levtatarov

+1

웹 서버의 루트에서 서비스를 제공 할 때 StripPrefix는 실제로 필요하지 않습니다. 다른 경로에서 서버를 원할 때 정말 필요합니다. http://golang.org/pkg/net/http/#StripPrefix 및 http://golang.org/pkg/net/http/#FileServer를 확인하십시오. – Intermernet