Skip to content

Commit

Permalink
feat(Webdav):Add overwrite support for moveFiles and copyFiles
Browse files Browse the repository at this point in the history
  • Loading branch information
xkeyC committed Mar 27, 2023
1 parent f172220 commit ca7b21d
Showing 1 changed file with 67 additions and 20 deletions.
87 changes: 67 additions & 20 deletions pkg/webdav/file.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,26 +38,51 @@ func moveFiles(ctx context.Context, fs *filesystem.FileSystem, src FileInfo, dst
fileIDs = []uint{src.(*model.File).ID}
}

// 判断是否需要移动
if src.GetPosition() != path.Dir(dst) {
err = fs.Move(
ctx,
folderIDs,
fileIDs,
src.GetPosition(),
path.Dir(dst),
)
}

// 判断是否需要重命名
if err == nil && src.GetName() != path.Base(dst) {
err = fs.Rename(
ctx,
folderIDs,
fileIDs,
path.Base(dst),
)
}
// 判断是否需要移动
if src.GetPosition() != path.Dir(dst) {
err = fs.Move(
ctx,
folderIDs,
fileIDs,
src.GetPosition(),
path.Dir(dst),
)
}
if overwrite {
if err := _checkOverwriteFile(ctx, fs, src, dst); err != nil {
return http.StatusNoContent, err
}
}

// 判断是否需要移动
if src.GetPosition() != path.Dir(dst) {
err = fs.Move(
ctx,
folderIDs,
fileIDs,
src.GetPosition(),
path.Dir(dst),
)
}

// 判断是否需要重命名
if err == nil && src.GetName() != path.Base(dst) {
err = fs.Rename(
ctx,
folderIDs,
fileIDs,
path.Base(dst),
)
}
// 判断是否需要重命名
if err == nil && src.GetName() != path.Base(dst) {
err = fs.Rename(
ctx,
folderIDs,
fileIDs,
path.Base(dst),
)
}

if err != nil {
return http.StatusInternalServerError, err
Expand All @@ -74,6 +99,12 @@ func copyFiles(ctx context.Context, fs *filesystem.FileSystem, src FileInfo, dst
}
recursion++

if overwrite {
if err := _checkOverwriteFile(ctx, fs, src, dst); err != nil {
return http.StatusNoContent, err
}
}

if src.IsDir() {
err := fs.Copy(
ctx,
Expand All @@ -94,6 +125,22 @@ func copyFiles(ctx context.Context, fs *filesystem.FileSystem, src FileInfo, dst
return http.StatusNoContent, nil
}

// 判断目标 文件/夹 是否已经存在,存在则先删除目标文件/夹
func _checkOverwriteFile(ctx context.Context, fs *filesystem.FileSystem, src FileInfo, dst string) error {
if src.IsDir() {
ok, folder := fs.IsPathExist(dst)
if ok {
return fs.Delete(ctx, []uint{folder.ID}, []uint{}, false, false)
}
} else {
ok, file := fs.IsFileExist(dst)
if ok {
return fs.Delete(ctx, []uint{}, []uint{file.ID}, false, false)
}
}
return nil
}

// walkFS traverses filesystem fs starting at name up to depth levels.
//
// Allowed values for depth are 0, 1 or infiniteDepth. For each visited node,
Expand Down

0 comments on commit ca7b21d

Please sign in to comment.