// ServeFiles serves files from the given file system root. // The path must end with "/*filepath", files are then served from the local // path /defined/root/dir/*filepath. // For example if root is "/etc" and *filepath is "passwd", the local file // "/etc/passwd" would be served. // Internally a http.FileServer is used, therefore http.NotFound is used instead // of the Router's NotFound handler. // router.ServeFiles("/src/*filepath", "/var/www") func (r *Router) ServeFiles(path string, rootPath string) { if len(path) < 10 || path[len(path)-10:] != "/*filepath" { panic("path must end with /*filepath in path '" + path + "'") } prefix := path[:len(path)-10] fileHandler := fasthttp.FSHandler(rootPath, strings.Count(prefix, "/")) r.GET(path, func(ctx *fasthttp.RequestCtx, _ Params) { fileHandler(ctx) }) }
package fasthttp_test import ( "bytes" "log" "github.com/valyala/fasthttp" ) // Setup file handlers (aka 'file server config') var ( // Handler for serving images from /img/ path, // i.e. /img/foo/bar.jpg will be served from // /var/www/images/foo/bar.jpb . imgPrefix = []byte("/img/") imgHandler = fasthttp.FSHandler("/var/www/images", 1) // Handler for serving css from /static/css/ path, // i.e. /static/css/foo/bar.css will be served from // /home/dev/css/foo/bar.css . cssPrefix = []byte("/static/css/") cssHandler = fasthttp.FSHandler("/home/dev/css", 2) // Handler for serving the rest of requests, // i.e. /foo/bar/baz.html will be served from // /var/www/files/foo/bar/baz.html . filesHandler = fasthttp.FSHandler("/var/www/files", 0) ) // Main request handler func requestHandler(ctx *fasthttp.RequestCtx) {