1 Star 0 Fork 0

曾广宇/mxx-core-v2

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
克隆/下载
file_server.go 1.84 KB
一键复制 编辑 原始数据 按行查看 历史
曾广宇 提交于 2024-06-13 14:11 +08:00 . 升级
package mweb
import (
"embed"
"gitee.com/dennis-mxx/mxx-core-v2/mlogger"
"gitee.com/dennis-mxx/mxx-core-v2/mutil"
"github.com/gin-gonic/gin"
"strings"
)
type RedirectFileServer struct {
FS embed.FS
Dir string
Ignore []string
Adapter func(ctx *gin.Context) bool
}
func (ew RedirectFileServer) Create() func(ctx *gin.Context) {
return func(ctx *gin.Context) {
uri := ctx.Request.URL.Path
static := true
for _, item := range ew.Ignore {
if strings.HasPrefix(uri, item) {
static = false
ctx.Next()
return
}
}
if static {
if ew.Adapter == nil || ew.Adapter(ctx) {
var contentType string
var b []byte
var e error
if paths := strings.Split(uri, "/"); len(paths) > 0 {
filename := paths[len(paths)-1]
i := strings.LastIndexAny(filename, ".")
if i > 0 {
suffix := filename[i:]
contentType = mutil.Extension(suffix)
b, e = ew.FS.ReadFile(ew.Dir + uri)
} else {
b, e = ew.FS.ReadFile(ew.Dir + "/index.html")
}
} else {
b, e = ew.FS.ReadFile(ew.Dir + "/index.html")
}
if contentType == "" {
contentType = "text/html;charset=utf-8"
}
ctx.Header("Content-Type", contentType)
if e == nil {
ctx.Status(200)
if _, err := ctx.Writer.Write(b); err != nil {
mlogger.Out.Error("file server writer exception", e)
}
} else {
mlogger.Out.Error("file server reader exception", e)
}
}
}
}
}
func NewRedirectFileServer(fs embed.FS, prefix []string) func(ctx *gin.Context) {
return RedirectFileServer{FS: fs, Ignore: prefix, Dir: "build", Adapter: func(ctx *gin.Context) bool {
ctx.Header("Accept-Ranges", "bytes")
ctx.Header("Connection", "keep-alive")
ctx.Header("Keep-Alive", "timeout=5")
ctx.Header("X-Powered-By", "Express")
ctx.Header("Cache-Control", "max-age=1800")
return true
}}.Create()
}
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/dennis-mxx/mxx-core-v2.git
git@gitee.com:dennis-mxx/mxx-core-v2.git
dennis-mxx
mxx-core-v2
mxx-core-v2
v0.4.74

搜索帮助