代码拉取完成,页面将自动刷新
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()
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。