Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

go-lang simple webserver : serve static image

Tags:

go

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?

like image 598
levtatarov Avatar asked May 21 '13 14:05

levtatarov


1 Answers

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

like image 106
Intermernet Avatar answered Nov 01 '22 12:11

Intermernet