Cloudreve/bootstrap/static.go

92 lines
2.1 KiB
Go
Raw Normal View History

2020-03-09 14:07:36 +08:00
package bootstrap
import (
2020-04-08 10:00:03 +08:00
"encoding/json"
"github.com/HFO4/cloudreve/pkg/conf"
2020-03-09 14:07:36 +08:00
"github.com/HFO4/cloudreve/pkg/util"
_ "github.com/HFO4/cloudreve/statik"
2020-03-09 16:53:01 +08:00
"github.com/gin-contrib/static"
2020-03-09 14:07:36 +08:00
"github.com/rakyll/statik/fs"
2020-04-08 10:00:03 +08:00
"io/ioutil"
2020-03-09 14:07:36 +08:00
"net/http"
)
type GinFS struct {
FS http.FileSystem
}
2020-04-08 10:00:03 +08:00
type staticVersion struct {
Name string `json:"name"`
Version string `json:"version"`
}
2020-03-09 14:07:36 +08:00
// StaticFS 内置静态文件资源
2020-03-09 16:53:01 +08:00
var StaticFS static.ServeFileSystem
2020-03-09 14:07:36 +08:00
// Open 打开文件
func (b *GinFS) Open(name string) (http.File, error) {
return b.FS.Open(name)
}
// Exists 文件是否存在
func (b *GinFS) Exists(prefix string, filepath string) bool {
if _, err := b.FS.Open(filepath); err != nil {
return false
}
return true
}
// InitStatic 初始化静态资源文件
func InitStatic() {
var err error
2020-03-09 16:53:01 +08:00
2020-03-11 10:32:35 +08:00
if util.Exists(util.RelativePath("statics")) {
2020-03-09 16:53:01 +08:00
util.Log().Info("检测到 statics 目录存在,将使用此目录下的静态资源文件")
2020-03-11 10:32:35 +08:00
StaticFS = static.LocalFile(util.RelativePath("statics"), false)
// 检查静态资源的版本
f, err := StaticFS.Open("version.json")
2020-03-09 16:53:01 +08:00
if err != nil {
util.Log().Warning("静态资源版本标识文件不存在,请重新构建或删除 statics 目录")
return
2020-03-09 16:53:01 +08:00
}
b, err := ioutil.ReadAll(f)
if err != nil {
util.Log().Warning("无法读取静态资源文件版本,请重新构建或删除 statics 目录")
return
}
2020-04-08 10:00:03 +08:00
var v staticVersion
if err := json.Unmarshal(b, &v); err != nil {
util.Log().Warning("无法解析静态资源文件版本, %s", err)
return
}
2020-04-08 10:00:03 +08:00
staticName := "cloudreve-frontend"
if conf.IsPro == "true" {
staticName += "-pro"
}
2020-04-08 10:00:03 +08:00
if v.Name != staticName {
util.Log().Warning("静态资源版本不匹配,请重新构建或删除 statics 目录")
return
}
2020-04-08 10:00:03 +08:00
if v.Version != conf.RequiredStaticVersion {
util.Log().Warning("静态资源版本不匹配 [当前 %s, 需要: %s],请重新构建或删除 statics 目录", v.Version, conf.RequiredStaticVersion)
return
}
2020-04-08 10:00:03 +08:00
} else {
StaticFS = &GinFS{}
StaticFS.(*GinFS).FS, err = fs.New()
if err != nil {
util.Log().Panic("无法初始化静态资源, %s", err)
}
2020-04-08 10:00:03 +08:00
}
2020-03-09 14:07:36 +08:00
}