levtatarov
levtatarov

Reputation: 1712

go-lang simple webserver : serve static image

I want to write a simple webserver in go that does the following: when i go to http://example.go:8080/image, it returns a static image. I'm following an example i found here. In this example they implement this method:

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

and then refer to it here :

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

Now, what i wanna do is serve an image instead of writing to the string. How would i go about that?

Upvotes: 16

Views: 23034

Answers (1)

Intermernet
Intermernet

Reputation: 19388

You can serve static files using the http.FileServer function.

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)
    }
}

EDIT: More idiomatic code.

EDIT 2: This code above will return an image image.png when the browser requests http://example.go/image.png

The http.StripPrefix function here is strictly unnecessary in this case as the path being handled is the web root. If the images were to be served from the path http://example.go/images/image.png then the line above would need to be http.Handle("/images/", http.StripPrefix("/images/", http.FileServer(http.Dir("path/to/file")))).

Playground

Upvotes: 28

Related Questions