From 8a684e9f4d7df6f3809f71b943d54932a8d0a1fc Mon Sep 17 00:00:00 2001 From: vicanso Date: Fri, 4 Jun 2021 21:43:27 +0800 Subject: [PATCH] feat: embed support send file function --- docs/middlewares.md | 11 +++++++---- middleware/static_embed.go | 15 +++++++++++++++ 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/docs/middlewares.md b/docs/middlewares.md index 268cf29..968369f 100644 --- a/docs/middlewares.md +++ b/docs/middlewares.md @@ -708,6 +708,8 @@ func main() { package main import ( + "time" + "github.com/vicanso/elton" "github.com/vicanso/elton/middleware" ) @@ -720,9 +722,9 @@ func main() { e.GET("/*", middleware.NewStaticServe(sf, middleware.StaticServeConfig{ Path: "/tmp", // 客户端缓存一年 - MaxAge: 365 * 24 * 3600, + MaxAge: 365 * 24 * time.Hour, // 缓存服务器缓存一个小时 - SMaxAge: 60 * 60, + SMaxAge: time.Hour, DenyQueryString: true, DisableLastModified: true, // 如果使用packr,它不支持Stat,因此需要用强ETag @@ -745,6 +747,7 @@ package main import ( "bytes" "io" + "time" "os" packr "github.com/gobuffalo/packr/v2" @@ -789,9 +792,9 @@ func main() { // static file route e.GET("/static/*", middleware.NewStaticServe(sf, middleware.StaticServeConfig{ // 客户端缓存一年 - MaxAge: 365 * 24 * 3600, + MaxAge: 365 * 24 * time.Hour, // 缓存服务器缓存一个小时 - SMaxAge: 60 * 60, + SMaxAge: time.Hour, DenyQueryString: true, DisableLastModified: true, })) diff --git a/middleware/static_embed.go b/middleware/static_embed.go index c9cb061..6cebb89 100644 --- a/middleware/static_embed.go +++ b/middleware/static_embed.go @@ -28,6 +28,8 @@ import ( "io" "os" "path/filepath" + + "github.com/vicanso/elton" ) type embedStaticFS struct { @@ -77,3 +79,16 @@ func (es *embedStaticFS) NewReader(file string) (io.Reader, error) { } return bytes.NewReader(buf), nil } + +// SendFile sends file to http response and set content type +func (es *embedStaticFS) SendFile(c *elton.Context, file string) (err error) { + // 因为静态文件打包至程序中,直接读取 + buf, err := es.Get(file) + if err != nil { + return + } + // 根据文件后续设置类型 + c.SetContentTypeByExt(file) + c.BodyBuffer = bytes.NewBuffer(buf) + return +}