use files instead of buffers for serving
1 file changed, 5 insertions(+), 26 deletions(-)
changed files
M shared/storage/files/file.go → shared/storage/files/file.go
@@ -5,16 +5,12 @@ "errors" "fmt" "hash/fnv" "io" - "mime" - "net/http" "os" - "path/filepath" "strings" "github.com/Southclaws/fault" "github.com/Southclaws/fault/fmsg" - "alin.ovh/homestead/shared/buffer" "alin.ovh/homestead/shared/storage" )@@ -29,18 +25,12 @@ f, err := os.Open(filename) if err != nil { return nil, fault.Wrap(err, fmsg.With("could not open file for reading")) } - defer f.Close() stat, err := f.Stat() if err != nil { return nil, fault.Wrap(err, fmsg.With("could not stat file")) } - buf := new(buffer.Buffer) - if _, err := f.WriteTo(buf); err != nil { - return nil, fault.Wrap(err, fmsg.With("could not read file")) - } - - etag, err := etag(buf) + etag, err := etag(f) if err != nil { return nil, fault.Wrap(err, fmsg.With("could not calculate etag")) }@@ -48,11 +38,10 @@ file := &storage.File{ Path: path, FSPath: filename, - ContentType: getContentType(filename, buf), LastModified: stat.ModTime(), Etag: etag, - Encodings: map[string]*buffer.Buffer{ - "identity": buf, + Encodings: map[string]*os.File{ + "identity": f, }, }@@ -68,15 +57,14 @@ err, fmsg.With(fmt.Sprintf("could not stat file %s", filename+suffix)), ) } - bytes, err := os.ReadFile(filename + suffix) + f, err := os.Open(filename + suffix) if err != nil { return nil, fault.Wrap( err, fmsg.With(fmt.Sprintf("could not read file %s", filename+suffix)), ) } - buf := buffer.NewBuffer(bytes) - file.Encodings[enc] = buf + file.Encodings[enc] = f } return file, nil@@ -111,12 +99,3 @@ cutSuffix(filename, "index.html"), ".html", ) } - -func getContentType(filename string, buf *buffer.Buffer) string { - ext := filepath.Ext(filename) - if ext == "" { - return http.DetectContentType(buf.FirstBlock()) - } - - return mime.TypeByExtension(ext) -}