Skip to content

Instantly share code, notes, and snippets.

@rjeczalik
Last active September 20, 2015 10:58
Show Gist options
  • Save rjeczalik/3c388387848a9f99a3cf to your computer and use it in GitHub Desktop.
Save rjeczalik/3c388387848a9f99a3cf to your computer and use it in GitHub Desktop.
drop-in file server for go-bindata
package main
import (
"bytes"
"net/http"
"os"
)
type file struct {
name string
p []byte
fi os.FileInfo
}
type DataServer struct {
files map[string]file
}
func NewDataServer(names ...string) (*DataServer, error) {
ds := &DataServer{
files: make(map[string]file, len(names)),
}
for _, name := range names {
if _, ok := ds.files[name]; ok {
continue // ignore duplicates
}
p, err := Asset(name)
if err != nil {
return nil, err
}
fi, err := AssetInfo(name)
if err != nil {
return nil, err
}
ds.files[name] = file{
name: name,
p: p,
fi: fi,
}
}
return ds, nil
}
func (ds *DataServer) Serve(w http.ResponseWriter, r *http.Request, name string) {
f, ok := ds.files[name]
if !ok {
http.NotFound(w, r)
return
}
http.ServeContent(w, r, f.name, f.fi.ModTime(), bytes.NewReader(f.p))
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment