Serving Static Files

File server

You can use http.FileServeropen in new window with BunRouter's concise API with the help of bunrouter.HTTPHandleropen in new window converter, for exampleopen in new window:

//go:embed files
var filesFS embed.FS

func main() {
	fileServer := http.FileServer(http.FS(filesFS))

	router := bunrouter.New(
		bunrouter.Use(reqlog.NewMiddleware(
			reqlog.FromEnv("BUNDEBUG"),
		)),
	)

	router.GET("/", indexHandler)
	router.GET("/files/*path", bunrouter.HTTPHandler(fileServer))
}

fs.Sub

If you want to serve files without a folder name, use fs.Subopen in new window:

//go:embed files
var filesFS embed.FS

func main() {
    // Retrieve files subtree.
	filesFS, err := fs.Sub(filesFS, "files")
	if err != nil {
		panic(err)
	}

	fileServer := http.FileServer(http.FS(filesFS))

	router := bunrouter.New(
		bunrouter.Use(reqlog.NewMiddleware(
			reqlog.FromEnv("BUNDEBUG"),
		)),
	)

	router.GET("/*path", bunrouter.HTTPHandler(fileServer))
}

http.StripPrefix

If you want to serve files under a different prefix, use http.StripPrefixopen in new window. In the following example we change /files prefix to /static/files prefix:

//go:embed files
var filesFS embed.FS

func main() {
	filesFS, err := fs.Sub(filesFS, "files")
	if err != nil {
		panic(err)
	}

	fileServer := http.FileServer(http.FS(filesFS))
	fileServer = http.StripPrefix("/static/files", fileServer)

	router := bunrouter.New(
		bunrouter.Use(reqlog.NewMiddleware(
			reqlog.FromEnv("BUNDEBUG"),
		)),
	)

	router.GET("/static/files/*path", bunrouter.HTTPHandler(fileServer))
}
Last Updated: