Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
hexbee
Cloudreve
提交
ee0f8e96
C
Cloudreve
项目概览
hexbee
/
Cloudreve
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Cloudreve
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
ee0f8e96
编写于
5月 23, 2020
作者:
H
HFO4
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Feat: eject internal static files
上级
60745ac8
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
79 addition
and
3 deletion
+79
-3
assets
assets
+1
-1
bootstrap/static.go
bootstrap/static.go
+67
-1
main.go
main.go
+11
-1
未找到文件。
assets
@
c2b69970
比较
b44dc051
...
c2b69970
Subproject commit
b44dc0514520580fc284937400743123bbb2c6d4
Subproject commit
c2b69970cb2405307e5dceb45297bc7afa756092
bootstrap/static.go
浏览文件 @
ee0f8e96
...
...
@@ -7,10 +7,14 @@ import (
_
"github.com/HFO4/cloudreve/statik"
"github.com/gin-contrib/static"
"github.com/rakyll/statik/fs"
"io"
"io/ioutil"
"net/http"
"path"
)
const
StaticFolder
=
"statics"
type
GinFS
struct
{
FS
http
.
FileSystem
}
...
...
@@ -42,7 +46,7 @@ func (b *GinFS) Exists(prefix string, filepath string) bool {
func
InitStatic
()
{
var
err
error
if
util
.
Exists
(
util
.
RelativePath
(
"statics"
))
{
if
util
.
Exists
(
util
.
RelativePath
(
StaticFolder
))
{
util
.
Log
()
.
Info
(
"检测到 statics 目录存在,将使用此目录下的静态资源文件"
)
StaticFS
=
static
.
LocalFile
(
util
.
RelativePath
(
"statics"
),
false
)
...
...
@@ -89,3 +93,65 @@ func InitStatic() {
}
}
// Eject 抽离内置静态资源
func
Eject
()
{
staticFS
,
err
:=
fs
.
New
()
if
err
!=
nil
{
util
.
Log
()
.
Panic
(
"无法初始化静态资源, %s"
,
err
)
}
root
,
err
:=
staticFS
.
Open
(
"/"
)
if
err
!=
nil
{
util
.
Log
()
.
Panic
(
"根目录不存在, %s"
,
err
)
}
var
walk
func
(
relPath
string
,
object
http
.
File
)
walk
=
func
(
relPath
string
,
object
http
.
File
)
{
stat
,
err
:=
object
.
Stat
()
if
err
!=
nil
{
util
.
Log
()
.
Error
(
"无法获取[%s]的信息, %s, 跳过..."
,
relPath
,
err
)
return
}
if
!
stat
.
IsDir
()
{
// 写入文件
out
,
err
:=
util
.
CreatNestedFile
(
util
.
RelativePath
(
StaticFolder
+
relPath
))
defer
out
.
Close
()
if
err
!=
nil
{
util
.
Log
()
.
Error
(
"无法创建文件[%s], %s, 跳过..."
,
relPath
,
err
)
return
}
util
.
Log
()
.
Info
(
"导出 [%s]..."
,
relPath
)
if
_
,
err
:=
io
.
Copy
(
out
,
object
);
err
!=
nil
{
util
.
Log
()
.
Error
(
"无法写入文件[%s], %s, 跳过..."
,
relPath
,
err
)
return
}
}
else
{
// 列出目录
objects
,
err
:=
object
.
Readdir
(
0
)
if
err
!=
nil
{
util
.
Log
()
.
Error
(
"无法步入子目录[%s], %s, 跳过..."
,
relPath
,
err
)
return
}
// 递归遍历子目录
for
_
,
newObject
:=
range
objects
{
newPath
:=
path
.
Join
(
relPath
,
newObject
.
Name
())
newRoot
,
err
:=
staticFS
.
Open
(
newPath
)
if
err
!=
nil
{
util
.
Log
()
.
Error
(
"无法打开对象[%s], %s, 跳过..."
,
newPath
,
err
)
continue
}
walk
(
newPath
,
newRoot
)
}
}
}
util
.
Log
()
.
Info
(
"开始导出内置静态资源..."
)
walk
(
"/"
,
root
)
util
.
Log
()
.
Info
(
"内置静态资源导出完成"
)
}
main.go
浏览文件 @
ee0f8e96
...
...
@@ -8,15 +8,25 @@ import (
"github.com/HFO4/cloudreve/routers"
)
var
confPath
string
var
(
isEject
bool
confPath
string
)
func
init
()
{
flag
.
StringVar
(
&
confPath
,
"c"
,
util
.
RelativePath
(
"conf.ini"
),
"配置文件路径"
)
flag
.
BoolVar
(
&
isEject
,
"eject"
,
false
,
"导出内置静态资源"
)
flag
.
Parse
()
bootstrap
.
Init
(
confPath
)
}
func
main
()
{
if
isEject
{
// 开始导出内置静态资源文件
bootstrap
.
Eject
()
return
}
api
:=
routers
.
InitRouter
()
// 如果启用了SSL
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录