From 438aa0e19b628923482dbc3fadcbb2e1ecfd5d7a Mon Sep 17 00:00:00 2001 From: Gabriel Arakaki Giovanini Date: Sun, 25 Jun 2023 18:36:33 +0200 Subject: fix: Actually read from embedded Previous implementation was not reading from embedded fs. --- pkg/ext/fileserver.go | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) (limited to 'pkg/ext') diff --git a/pkg/ext/fileserver.go b/pkg/ext/fileserver.go index fdea08e..ee4a80b 100644 --- a/pkg/ext/fileserver.go +++ b/pkg/ext/fileserver.go @@ -2,6 +2,8 @@ package ext import ( "io/fs" + "mime" + "path/filepath" "github.com/valyala/fasthttp" ) @@ -10,9 +12,22 @@ type FileSystem interface { Open(name string) (fs.File, error) } +// This is a VERY simple file server. It does not take a lot into consideration +// and it should only be used to return small predictable files, like in the +// static folder. func FileServer(rootFS FileSystem, rootPath string) fasthttp.RequestHandler { - return func(r *fasthttp.RequestCtx) { - path := r.UserValue("filepath").(string) - r.SendFile(rootPath + path) + return func(ctx *fasthttp.RequestCtx) { + path := ctx.UserValue("filepath").(string) + + f, err := rootFS.Open(rootPath + path) + if err != nil { + InternalServerError(ctx, err) + return + } + defer f.Close() + + m := mime.TypeByExtension(filepath.Ext(path)) + ctx.SetContentType(m) + ctx.SetBodyStream(f, -1) } } -- cgit v1.2.3