Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
hexbee
Cloudreve
提交
a445da52
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 搜索 >>
提交
a445da52
编写于
12月 08, 2019
作者:
H
HFO4
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Fix: failed unit test due to missing mock.ExpectWereMatch()
上级
6eff13c8
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
38 addition
and
20 deletion
+38
-20
pkg/filesystem/manage.go
pkg/filesystem/manage.go
+23
-10
pkg/filesystem/manage_test.go
pkg/filesystem/manage_test.go
+6
-5
service/explorer/file.go
service/explorer/file.go
+1
-2
service/explorer/objects.go
service/explorer/objects.go
+8
-3
未找到文件。
pkg/filesystem/manage.go
浏览文件 @
a445da52
...
...
@@ -26,24 +26,37 @@ type Object struct {
}
// Rename 重命名对象
func
(
fs
*
FileSystem
)
Rename
(
ctx
context
.
Context
,
src
,
new
string
)
(
err
error
)
{
func
(
fs
*
FileSystem
)
Rename
(
ctx
context
.
Context
,
dir
,
file
[]
uint
,
new
string
)
(
err
error
)
{
// 验证新名字
if
!
fs
.
ValidateLegalName
(
ctx
,
new
)
||
!
fs
.
ValidateExtension
(
ctx
,
new
)
{
return
ErrIllegalObjectName
}
// 如果源对象是文件
fileExist
,
file
:=
fs
.
IsFileExist
(
src
)
if
fileExist
{
err
=
file
.
Rename
(
new
)
return
err
if
len
(
file
)
>
0
{
fileObject
,
err
:=
model
.
GetFilesByIDs
([]
uint
{
file
[
0
]},
fs
.
User
.
ID
)
if
err
!=
nil
||
len
(
fileObject
)
==
0
{
return
ErrPathNotExist
}
err
=
fileObject
[
0
]
.
Rename
(
new
)
if
err
!=
nil
{
return
ErrFileExisted
}
return
nil
}
// 源对象是目录
folderExist
,
folder
:=
fs
.
IsPathExist
(
src
)
if
folderExist
{
err
=
folder
.
Rename
(
new
)
return
err
if
len
(
dir
)
>
0
{
folderObject
,
err
:=
model
.
GetFoldersByIDs
([]
uint
{
dir
[
0
]},
fs
.
User
.
ID
)
if
err
!=
nil
||
len
(
folderObject
)
==
0
{
return
ErrPathNotExist
}
err
=
folderObject
[
0
]
.
Rename
(
new
)
if
err
!=
nil
{
return
ErrFileExisted
}
return
nil
}
return
ErrPathNotExist
...
...
pkg/filesystem/manage_test.go
浏览文件 @
a445da52
...
...
@@ -411,7 +411,7 @@ func TestFileSystem_Copy(t *testing.T) {
WillReturnRows
(
sqlmock
.
NewRows
([]
string
{
"id"
,
"owner_id"
})
.
AddRow
(
1
,
1
))
// 1
mock
.
ExpectQuery
(
"SELECT(.+)"
)
.
WithArgs
(
1
,
1
,
"
src
"
)
.
WithArgs
(
1
,
1
,
"
dst
"
)
.
WillReturnRows
(
sqlmock
.
NewRows
([]
string
{
"id"
,
"owner_id"
})
.
AddRow
(
2
,
1
))
// 根目录
mock
.
ExpectQuery
(
"SELECT(.+)"
)
.
...
...
@@ -419,17 +419,17 @@ func TestFileSystem_Copy(t *testing.T) {
WillReturnRows
(
sqlmock
.
NewRows
([]
string
{
"id"
,
"owner_id"
})
.
AddRow
(
1
,
1
))
// 1
mock
.
ExpectQuery
(
"SELECT(.+)"
)
.
WithArgs
(
1
,
1
,
"
dst
"
)
.
WithArgs
(
1
,
1
,
"
src
"
)
.
WillReturnRows
(
sqlmock
.
NewRows
([]
string
{
"id"
,
"owner_id"
})
.
AddRow
(
2
,
1
))
err
:=
fs
.
Copy
(
ctx
,
[]
uint
{
1
},
[]
uint
{},
"/src"
,
"/dst"
)
asserts
.
Error
(
err
)
asserts
.
NoError
(
mock
.
ExpectationsWereMet
())
}
}
func
TestFileSystem_Move
(
t
*
testing
.
T
)
{
conf
.
DatabaseConfig
.
Type
=
"mysql"
asserts
:=
assert
.
New
(
t
)
fs
:=
&
FileSystem
{
User
:
&
model
.
User
{
Model
:
gorm
.
Model
{
...
...
@@ -458,7 +458,7 @@ func TestFileSystem_Move(t *testing.T) {
WillReturnRows
(
sqlmock
.
NewRows
([]
string
{
"id"
,
"owner_id"
})
.
AddRow
(
1
,
1
))
// 1
mock
.
ExpectQuery
(
"SELECT(.+)"
)
.
WithArgs
(
1
,
1
,
"
src
"
)
.
WithArgs
(
1
,
1
,
"
dst
"
)
.
WillReturnRows
(
sqlmock
.
NewRows
([]
string
{
"id"
,
"owner_id"
})
.
AddRow
(
2
,
1
))
// 根目录
mock
.
ExpectQuery
(
"SELECT(.+)"
)
.
...
...
@@ -466,9 +466,10 @@ func TestFileSystem_Move(t *testing.T) {
WillReturnRows
(
sqlmock
.
NewRows
([]
string
{
"id"
,
"owner_id"
})
.
AddRow
(
1
,
1
))
// 1
mock
.
ExpectQuery
(
"SELECT(.+)"
)
.
WithArgs
(
1
,
1
,
"
dst
"
)
.
WithArgs
(
1
,
1
,
"
src
"
)
.
WillReturnRows
(
sqlmock
.
NewRows
([]
string
{
"id"
,
"owner_id"
})
.
AddRow
(
2
,
1
))
err
:=
fs
.
Move
(
ctx
,
[]
uint
{
1
},
[]
uint
{},
"/src"
,
"/dst"
)
asserts
.
Error
(
err
)
asserts
.
NoError
(
mock
.
ExpectationsWereMet
())
}
}
service/explorer/file.go
浏览文件 @
a445da52
...
...
@@ -6,7 +6,6 @@ import (
"github.com/HFO4/cloudreve/pkg/serializer"
"github.com/gin-gonic/gin"
"net/http"
"time"
)
// FileDownloadService 文件下载服务,path为文件完整路径
...
...
@@ -32,7 +31,7 @@ func (service *FileDownloadService) Download(ctx context.Context, c *gin.Context
// 设置文件名
c
.
Header
(
"Content-Disposition"
,
"attachment; filename=
\"
"
+
fs
.
FileTarget
[
0
]
.
Name
+
"
\"
"
)
// 发送文件
http
.
ServeContent
(
c
.
Writer
,
c
.
Request
,
""
,
time
.
Time
{}
,
rs
)
http
.
ServeContent
(
c
.
Writer
,
c
.
Request
,
""
,
fs
.
FileTarget
[
0
]
.
UpdatedAt
,
rs
)
return
serializer
.
Response
{
Code
:
0
,
...
...
service/explorer/objects.go
浏览文件 @
a445da52
...
...
@@ -16,8 +16,8 @@ type ItemMoveService struct {
// ItemRenameService 处理多文件/目录重命名
type
ItemRenameService
struct
{
Src
string
`json:"src" binding:"required,min=1,max=65535,ne=/
"`
NewName
string
`json:"new_name" binding:"required,min=1,max=255"`
Src
ItemService
`json:"src" binding:"exists
"`
NewName
string
`json:"new_name" binding:"required,min=1,max=255"`
}
// ItemService 处理多文件/目录相关服务
...
...
@@ -93,6 +93,11 @@ func (service *ItemMoveService) Copy(ctx context.Context, c *gin.Context) serial
// Rename 重命名对象
func
(
service
*
ItemRenameService
)
Rename
(
ctx
context
.
Context
,
c
*
gin
.
Context
)
serializer
.
Response
{
// 重命名作只能对一个目录或文件对象进行操作
if
len
(
service
.
Src
.
Items
)
+
len
(
service
.
Src
.
Dirs
)
>
1
{
return
serializer
.
ParamErr
(
"只能操作一个对象"
,
nil
)
}
// 创建文件系统
fs
,
err
:=
filesystem
.
NewFileSystemFromContext
(
c
)
if
err
!=
nil
{
...
...
@@ -100,7 +105,7 @@ func (service *ItemRenameService) Rename(ctx context.Context, c *gin.Context) se
}
// 重命名对象
err
=
fs
.
Rename
(
ctx
,
service
.
Src
,
service
.
NewName
)
err
=
fs
.
Rename
(
ctx
,
service
.
Src
.
Dirs
,
service
.
Src
.
Items
,
service
.
NewName
)
if
err
!=
nil
{
return
serializer
.
Err
(
serializer
.
CodeNotSet
,
err
.
Error
(),
err
)
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录