Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
hexbee
Cloudreve
提交
0d7c0793
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,发现更多精彩内容 >>
提交
0d7c0793
编写于
1月 29, 2020
作者:
H
HFO4
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Feat: preview shared text/doc file
上级
68704f86
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
66 addition
and
1 deletion
+66
-1
routers/controllers/share.go
routers/controllers/share.go
+30
-1
routers/router.go
routers/router.go
+4
-0
service/explorer/file.go
service/explorer/file.go
+5
-0
service/share/visit.go
service/share/visit.go
+27
-0
未找到文件。
routers/controllers/share.go
浏览文件 @
0d7c0793
...
@@ -46,7 +46,7 @@ func PreviewShare(c *gin.Context) {
...
@@ -46,7 +46,7 @@ func PreviewShare(c *gin.Context) {
defer
cancel
()
defer
cancel
()
var
service
share
.
SingleFileService
var
service
share
.
SingleFileService
if
err
:=
c
.
ShouldBind
Uri
(
&
service
);
err
==
nil
{
if
err
:=
c
.
ShouldBind
Query
(
&
service
);
err
==
nil
{
res
:=
service
.
PreviewContent
(
ctx
,
c
,
false
)
res
:=
service
.
PreviewContent
(
ctx
,
c
,
false
)
// 是否需要重定向
// 是否需要重定向
if
res
.
Code
==
-
301
{
if
res
.
Code
==
-
301
{
...
@@ -61,3 +61,32 @@ func PreviewShare(c *gin.Context) {
...
@@ -61,3 +61,32 @@ func PreviewShare(c *gin.Context) {
c
.
JSON
(
200
,
ErrorResponse
(
err
))
c
.
JSON
(
200
,
ErrorResponse
(
err
))
}
}
}
}
// PreviewShareText 预览文本文件
func
PreviewShareText
(
c
*
gin
.
Context
)
{
// 创建上下文
ctx
,
cancel
:=
context
.
WithCancel
(
context
.
Background
())
defer
cancel
()
var
service
share
.
SingleFileService
if
err
:=
c
.
ShouldBindQuery
(
&
service
);
err
==
nil
{
res
:=
service
.
PreviewContent
(
ctx
,
c
,
true
)
// 是否有错误发生
if
res
.
Code
!=
0
{
c
.
JSON
(
200
,
res
)
}
}
else
{
c
.
JSON
(
200
,
ErrorResponse
(
err
))
}
}
// GetShareDocPreview 创建分享Office文档预览地址
func
GetShareDocPreview
(
c
*
gin
.
Context
)
{
var
service
share
.
SingleFileService
if
err
:=
c
.
ShouldBindQuery
(
&
service
);
err
==
nil
{
res
:=
service
.
CreateDocPreviewSession
(
c
)
c
.
JSON
(
200
,
res
)
}
else
{
c
.
JSON
(
200
,
ErrorResponse
(
err
))
}
}
routers/router.go
浏览文件 @
0d7c0793
...
@@ -176,6 +176,10 @@ func InitMasterRouter() *gin.Engine {
...
@@ -176,6 +176,10 @@ func InitMasterRouter() *gin.Engine {
share
.
POST
(
"download/:id"
,
controllers
.
GetShareDownload
)
share
.
POST
(
"download/:id"
,
controllers
.
GetShareDownload
)
// 预览分享文件
// 预览分享文件
share
.
GET
(
"preview/:id"
,
controllers
.
PreviewShare
)
share
.
GET
(
"preview/:id"
,
controllers
.
PreviewShare
)
// 取得Office文档预览地址
share
.
GET
(
"doc/:id"
,
controllers
.
GetShareDocPreview
)
// 获取文本文件内容
share
.
GET
(
"content/:id"
,
controllers
.
PreviewShareText
)
}
}
// 需要登录保护的
// 需要登录保护的
...
...
service/explorer/file.go
浏览文件 @
0d7c0793
...
@@ -128,6 +128,11 @@ func (service *SingleFileService) CreateDocPreviewSession(ctx context.Context, c
...
@@ -128,6 +128,11 @@ func (service *SingleFileService) CreateDocPreviewSession(ctx context.Context, c
}
}
defer
fs
.
Recycle
()
defer
fs
.
Recycle
()
// 如果上下文中已有File对象,则重设目标
if
file
,
ok
:=
ctx
.
Value
(
fsctx
.
FileModelCtx
)
.
(
*
model
.
File
);
ok
{
fs
.
SetTargetFile
(
&
[]
model
.
File
{
*
file
})
}
// 获取文件临时下载地址
// 获取文件临时下载地址
downloadURL
,
err
:=
fs
.
GetDownloadURL
(
ctx
,
service
.
Path
,
"doc_preview_timeout"
)
downloadURL
,
err
:=
fs
.
GetDownloadURL
(
ctx
,
service
.
Path
,
"doc_preview_timeout"
)
if
err
!=
nil
{
if
err
!=
nil
{
...
...
service/share/visit.go
浏览文件 @
0d7c0793
...
@@ -127,6 +127,33 @@ func (service *SingleFileService) PreviewContent(ctx context.Context, c *gin.Con
...
@@ -127,6 +127,33 @@ func (service *SingleFileService) PreviewContent(ctx context.Context, c *gin.Con
return
subService
.
PreviewContent
(
ctx
,
c
,
isText
)
return
subService
.
PreviewContent
(
ctx
,
c
,
isText
)
}
}
// CreateDocPreviewSession 创建Office预览会话,返回预览地址
func
(
service
*
SingleFileService
)
CreateDocPreviewSession
(
c
*
gin
.
Context
)
serializer
.
Response
{
user
:=
currentUser
(
c
)
share
:=
model
.
GetShareByHashID
(
c
.
Param
(
"id"
))
if
share
==
nil
||
!
share
.
IsAvailable
()
{
return
serializer
.
Err
(
serializer
.
CodeNotFound
,
"分享不存在或已被取消"
,
nil
)
}
if
!
share
.
PreviewEnabled
{
return
serializer
.
Err
(
serializer
.
CodeNoPermissionErr
,
"此分享无法预览"
,
nil
)
}
// 检查用户是否可以下载此分享的文件
err
:=
CheckBeforeGetShare
(
share
,
user
,
c
)
if
err
!=
nil
{
return
serializer
.
Err
(
serializer
.
CodeNoPermissionErr
,
err
.
Error
(),
nil
)
}
// 用于调下层service
ctx
:=
context
.
WithValue
(
context
.
Background
(),
fsctx
.
FileModelCtx
,
share
.
GetSource
())
subService
:=
explorer
.
SingleFileService
{
Path
:
""
,
}
return
subService
.
CreateDocPreviewSession
(
ctx
,
c
)
}
// CheckBeforeGetShare 获取分享内容/下载前进行的一系列检查
// CheckBeforeGetShare 获取分享内容/下载前进行的一系列检查
func
CheckBeforeGetShare
(
share
*
model
.
Share
,
user
*
model
.
User
,
c
*
gin
.
Context
)
error
{
func
CheckBeforeGetShare
(
share
*
model
.
Share
,
user
*
model
.
User
,
c
*
gin
.
Context
)
error
{
// 检查用户是否可以下载此分享的文件
// 检查用户是否可以下载此分享的文件
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录