Skip to content

Commit e5fbac1

Browse files
committed
perf:支持创建副本命令
1 parent c676c3e commit e5fbac1

File tree

1 file changed

+56
-0
lines changed

1 file changed

+56
-0
lines changed

elfinder.go

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,52 @@ func (elf *ElFinderConnector) search() {
431431
elf.res = &ret
432432
}
433433

434+
func (elf *ElFinderConnector) duplicate() {
435+
added := make([]FileDir, 0, len(elf.req.Targets))
436+
for _, target := range elf.req.Targets {
437+
srcIDAndTarget := strings.Split(target, "_")
438+
srcVol := elf.getVolume(srcIDAndTarget[0])
439+
srcPath, err := elf.parseTarget(strings.Join(srcIDAndTarget[1:], "_"))
440+
if err != nil {
441+
log.Println("parse path err: ", err)
442+
continue
443+
}
444+
srcFileDir, err := srcVol.Info(srcPath)
445+
if err != nil {
446+
log.Println("Get File err: ", err)
447+
continue
448+
}
449+
dstPath := filepath.Dir(srcPath)
450+
newName := createDuplicateName(srcFileDir.Name)
451+
if srcFileDir.Dirs == 1 {
452+
newDstDirFile, err := srcVol.MakeDir(dstPath, newName)
453+
if err != nil {
454+
log.Printf("Make Dir err: %s", err.Error())
455+
elf.res.Error = []string{errMsg, err.Error()}
456+
break
457+
}
458+
added = append(added, newDstDirFile)
459+
newAddFiles := elf.copyFolder(filepath.Join(dstPath, newDstDirFile.Name), srcPath, srcVol, srcVol)
460+
added = append(added, newAddFiles...)
461+
} else {
462+
srcFd, err := srcVol.GetFile(srcPath)
463+
if err != nil {
464+
log.Println("Get File err: ", err.Error())
465+
elf.res.Error = []string{errMsg, err.Error()}
466+
break
467+
}
468+
dstFdInfo, err := srcVol.Paste(dstPath, newName, "_duplicate_", srcFd)
469+
if err != nil {
470+
log.Println("Duplicate path err: ", err)
471+
elf.res.Error = []string{errMsg, err.Error()}
472+
break
473+
}
474+
added = append(added, dstFdInfo)
475+
}
476+
}
477+
elf.res.Added = added
478+
}
479+
434480
func (elf *ElFinderConnector) size() {
435481
var totalSize int64
436482
for _, target := range elf.req.Targets {
@@ -700,6 +746,8 @@ func (elf *ElFinderConnector) dispatch(rw http.ResponseWriter, req *http.Request
700746
return
701747
case "search":
702748
elf.search()
749+
case "duplicate":
750+
elf.duplicate()
703751
default:
704752
elf.res.Error = errUnknownCmd
705753
}
@@ -912,3 +960,11 @@ func calculateFolderSize(v Volume, folderPath string) int64 {
912960
}
913961
return totalSize
914962
}
963+
964+
func createDuplicateName(name string) string {
965+
newFilename := strings.TrimSuffix(name,
966+
filepath.Ext(name))
967+
newFilename += "_duplicate_" + time.Now().Format("2006-01-02-15-04-05")
968+
newFilename += filepath.Ext(name)
969+
return newFilename
970+
}

0 commit comments

Comments
 (0)