Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
47 changes: 47 additions & 0 deletions drivers/115/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -258,4 +258,51 @@ func (d *Pan115) GetDetails(ctx context.Context) (*model.StorageDetails, error)
}, nil
}

func (d *Pan115) BatchMove(ctx context.Context, srcDir model.Obj, srcObjs []model.Obj, dstDir model.Obj, args model.BatchArgs) error {
if err := d.WaitLimit(ctx); err != nil {
return err
}

var srcObjIds []string
for _, srcObj := range srcObjs {
srcObjIds = append(srcObjIds, srcObj.GetID())
}

return d.client.Move(dstDir.GetID(), srcObjIds...)
}

func (d *Pan115) BatchCopy(ctx context.Context, srcDir model.Obj, srcObjs []model.Obj, dstDir model.Obj, args model.BatchArgs) error {
if err := d.WaitLimit(ctx); err != nil {
return err
}

var srcObjIds []string
for _, srcObj := range srcObjs {
srcObjIds = append(srcObjIds, srcObj.GetID())
}

return d.client.Copy(dstDir.GetID(), srcObjIds...)
}

func (d *Pan115) BatchRemove(ctx context.Context, batchRemoveObj model.BatchRemoveObj, args model.BatchArgs) error {
if err := d.WaitLimit(ctx); err != nil {
return err
}

var srcObjIds []string
for _, srcObj := range batchRemoveObj.RemoveObjs {
srcObjIds = append(srcObjIds, srcObj.GetID())
}

return d.client.Delete(srcObjIds...)
}

func (d *Pan115) BatchRename(ctx context.Context, batchRenameObj model.BatchRenameObj, args model.BatchArgs) error {
if err := d.WaitLimit(ctx); err != nil {
return err
}

return d.batchRename(batchRenameObj)
}

var _ driver.Driver = (*Pan115)(nil)
20 changes: 20 additions & 0 deletions drivers/115/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -547,3 +547,23 @@ func SplitFileByPartSize(fileSize int64, chunkSize int64) ([]oss.FileChunk, erro

return chunks, nil
}

func (d *Pan115) batchRename(renameObj model.BatchRenameObj) error {

form := make(map[string]string)

for _, obj := range renameObj.RenameObjs {
form[fmt.Sprintf("files_new_name[%s]", obj.GetID())] = obj.NewName
}

result := driver115.BasicResp{}

req := d.client.NewRequest().
SetFormData(form).
ForceContentType("application/json;charset=UTF-8").
SetResult(&result)

resp, err := req.Post(driver115.ApiFileRename)

return driver115.CheckErr(err, &result, resp)
}
53 changes: 53 additions & 0 deletions drivers/115_open/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -367,4 +367,57 @@ func (d *Open115) GetDetails(ctx context.Context) (*model.StorageDetails, error)
// return nil, errs.NotSupport
//}

func (d *Open115) BatchMove(ctx context.Context, srcDir model.Obj, srcObjs []model.Obj, dstDir model.Obj, args model.BatchArgs) error {
if err := d.WaitLimit(ctx); err != nil {
return err
}

var srcObjIds []string
for _, srcObj := range srcObjs {
srcObjIds = append(srcObjIds, srcObj.GetID())
}

_, err := d.client.Move(ctx, &sdk.MoveReq{
FileIDs: strings.Join(srcObjIds, ","),
ToCid: dstDir.GetID(),
})
return err
}

func (d *Open115) BatchCopy(ctx context.Context, srcDir model.Obj, srcObjs []model.Obj, dstDir model.Obj, args model.BatchArgs) error {
if err := d.WaitLimit(ctx); err != nil {
return err
}

var srcObjIds []string
for _, srcObj := range srcObjs {
srcObjIds = append(srcObjIds, srcObj.GetID())
}

_, err := d.client.Copy(ctx, &sdk.CopyReq{
PID: dstDir.GetID(),
FileID: strings.Join(srcObjIds, ","),
NoDupli: "1",
})
return err
}

func (d *Open115) BatchRemove(ctx context.Context, batchRemoveObj model.BatchRemoveObj, args model.BatchArgs) error {
if err := d.WaitLimit(ctx); err != nil {
return err
}

var srcObjIds []string
for _, srcObj := range batchRemoveObj.RemoveObjs {
srcObjIds = append(srcObjIds, srcObj.GetID())
}

_, err := d.client.DelFile(ctx, &sdk.DelFileReq{
FileIDs: strings.Join(srcObjIds, ","),
ParentID: batchRemoveObj.Dir.GetID(),
})

return err
}

var _ driver.Driver = (*Open115)(nil)
30 changes: 28 additions & 2 deletions drivers/123_open/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,7 @@ func (d *Open123) MakeDir(ctx context.Context, parentDir model.Obj, dirName stri
func (d *Open123) Move(ctx context.Context, srcObj, dstDir model.Obj) error {
toParentFileID, _ := strconv.ParseInt(dstDir.GetID(), 10, 64)

return d.move(srcObj.(File).FileId, toParentFileID)
return d.move([]int64{srcObj.(File).FileId}, toParentFileID)
}

func (d *Open123) Rename(ctx context.Context, srcObj model.Obj, newName string) error {
Expand Down Expand Up @@ -152,7 +152,7 @@ func (d *Open123) Copy(ctx context.Context, srcObj, dstDir model.Obj) error {
func (d *Open123) Remove(ctx context.Context, obj model.Obj) error {
fileId, _ := strconv.ParseInt(obj.GetID(), 10, 64)

return d.trash(fileId)
return d.trash([]int64{fileId})
}

func (d *Open123) Put(ctx context.Context, dstDir model.Obj, file model.FileStreamer, up driver.UpdateProgress) (model.Obj, error) {
Expand Down Expand Up @@ -237,6 +237,32 @@ func (d *Open123) OfflineDownloadProcess(ctx context.Context, taskID int) (float
return d.queryOfflineDownloadStatus(ctx, taskID)
}

func (d *Open123) BatchMove(ctx context.Context, srcDir model.Obj, srcObjs []model.Obj, dstDir model.Obj, args model.BatchArgs) error {
var ids []int64
for _, obj := range srcObjs {
ids = append(ids, obj.(File).FileId)
}

return d.move(ids, dstDir.(File).FileId)
}

func (d *Open123) BatchRemove(ctx context.Context, batchRemoveObj model.BatchRemoveObj, args model.BatchArgs) error {
var ids []int64
for _, obj := range batchRemoveObj.RemoveObjs {
ids = append(ids, obj.(File).FileId)
}
return d.trash(ids)
}

func (d *Open123) BatchRename(ctx context.Context, batchRenameObj model.BatchRenameObj, args model.BatchArgs) error {
var renameList []string
for _, obj := range batchRenameObj.RenameObjs {
renameList = append(renameList, fmt.Sprintf("%d|%s", obj.Obj.(File).FileId, obj.NewName))
}

return d.batchRename(renameList)
}

var (
_ driver.Driver = (*Open123)(nil)
_ driver.PutResult = (*Open123)(nil)
Expand Down
56 changes: 39 additions & 17 deletions drivers/123_open/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import (
"fmt"
"net/http"
"net/url"
"slices"
"strconv"
"strings"
"time"
Expand All @@ -31,6 +32,7 @@ var ( // 不同情况下获取的AccessTokenQPS限制不同 如下模块化易
Mkdir = InitApiInfo(Api+"/upload/v1/file/mkdir", 2)
Move = InitApiInfo(Api+"/api/v1/file/move", 1)
Rename = InitApiInfo(Api+"/api/v1/file/name", 1)
BatchRename = InitApiInfo(Api+"/api/v1/file/rename", 0)
Trash = InitApiInfo(Api+"/api/v1/file/trash", 2)
UploadCreate = InitApiInfo(Api+"/upload/v2/file/create", 2)
UploadComplete = InitApiInfo(Api+"/upload/v2/file/upload_complete", 0)
Expand Down Expand Up @@ -240,15 +242,18 @@ func (d *Open123) mkdir(parentID int64, name string) error {
return nil
}

func (d *Open123) move(fileID, toParentFileID int64) error {
_, err := d.Request(Move, http.MethodPost, func(req *resty.Request) {
req.SetBody(base.Json{
"fileIDs": []int64{fileID},
"toParentFileID": toParentFileID,
})
}, nil)
if err != nil {
return err
func (d *Open123) move(fileIDs []int64, toParentFileID int64) error {

for ids := range slices.Chunk(fileIDs, 100) {
_, err := d.Request(Move, http.MethodPost, func(req *resty.Request) {
req.SetBody(base.Json{
"fileIDs": ids,
"toParentFileID": toParentFileID,
})
}, nil)
if err != nil {
return err
}
}

return nil
Expand All @@ -268,14 +273,31 @@ func (d *Open123) rename(fileId int64, fileName string) error {
return nil
}

func (d *Open123) trash(fileId int64) error {
_, err := d.Request(Trash, http.MethodPost, func(req *resty.Request) {
req.SetBody(base.Json{
"fileIDs": []int64{fileId},
})
}, nil)
if err != nil {
return err
func (d *Open123) batchRename(renameList []string) error {
for names := range slices.Chunk(renameList, 30) {
_, err := d.Request(BatchRename, http.MethodPost, func(req *resty.Request) {
req.SetBody(base.Json{
"renameList": names,
})
}, nil)
if err != nil {
return err
}
}

return nil
}

func (d *Open123) trash(fileIDs []int64) error {
for cids := range slices.Chunk(fileIDs, 100) {
_, err := d.Request(Trash, http.MethodPost, func(req *resty.Request) {
req.SetBody(base.Json{
"fileIDs": cids,
})
}, nil)
if err != nil {
return err
}
}

return nil
Expand Down
89 changes: 89 additions & 0 deletions drivers/189/driver.go
Original file line number Diff line number Diff line change
Expand Up @@ -204,4 +204,93 @@ func (d *Cloud189) GetDetails(ctx context.Context) (*model.StorageDetails, error
}, nil
}

func (d *Cloud189) BatchMove(ctx context.Context, srcDir model.Obj, srcObjs []model.Obj, dstDir model.Obj, args model.BatchArgs) error {
var taskInfos []base.Json
for _, srcObj := range srcObjs {
taskInfos = append(taskInfos, base.Json{
"fileId": srcObj.GetID(),
"fileName": srcObj.GetName(),
"isFolder": func() int {
if srcObj.IsDir() {
return 1
}
return 0
}(),
})
}
taskInfosBytes, err := utils.Json.Marshal(taskInfos)
if err != nil {
return err
}
form := map[string]string{
"type": "MOVE",
"targetFolderId": dstDir.GetID(),
"taskInfos": string(taskInfosBytes),
}
_, err = d.request("https://cloud.189.cn/api/open/batch/createBatchTask.action", http.MethodPost, func(req *resty.Request) {
req.SetFormData(form)
}, nil)
return err
}

func (d *Cloud189) BatchCopy(ctx context.Context, srcDir model.Obj, srcObjs []model.Obj, dstDir model.Obj, args model.BatchArgs) error {
var taskInfos []base.Json
for _, srcObj := range srcObjs {
taskInfos = append(taskInfos, base.Json{
"fileId": srcObj.GetID(),
"fileName": srcObj.GetName(),
"isFolder": func() int {
if srcObj.IsDir() {
return 1
}
return 0
}(),
})
}

taskInfosBytes, err := utils.Json.Marshal(taskInfos)
if err != nil {
return err
}
form := map[string]string{
"type": "COPY",
"targetFolderId": dstDir.GetID(),
"taskInfos": string(taskInfosBytes),
}
_, err = d.request("https://cloud.189.cn/api/open/batch/createBatchTask.action", http.MethodPost, func(req *resty.Request) {
req.SetFormData(form)
}, nil)
return err
}

func (d *Cloud189) BatchRemove(ctx context.Context, batchRenameObj model.BatchRemoveObj, args model.BatchArgs) error {

var taskInfos []base.Json
for _, srcObj := range batchRenameObj.RemoveObjs {
taskInfos = append(taskInfos, base.Json{
"fileId": srcObj.GetID(),
"fileName": srcObj.GetName(),
"isFolder": func() int {
if srcObj.IsDir() {
return 1
}
return 0
}(),
})
}
taskInfosBytes, err := utils.Json.Marshal(taskInfos)
if err != nil {
return err
}
form := map[string]string{
"type": "DELETE",
"targetFolderId": "",
"taskInfos": string(taskInfosBytes),
}
_, err = d.request("https://cloud.189.cn/api/open/batch/createBatchTask.action", http.MethodPost, func(req *resty.Request) {
req.SetFormData(form)
}, nil)
return err
}

var _ driver.Driver = (*Cloud189)(nil)
Loading