diff --git a/conf.yml.example b/conf.yml.example index eb1e5643..5f8317fe 100644 --- a/conf.yml.example +++ b/conf.yml.example @@ -18,7 +18,7 @@ server: password: password #用于重建目录 ali_drive: api_url: https://api.aliyundrive.com/v2 - max_files_count: 3000 + max_files_count: 50 #重建目录时每次请求的文件 drives: - refresh_token: xxx #refresh_token root_folder: root #根目录的file_id diff --git a/server/controllers/path.go b/server/controllers/path.go index 09369d10..e809bbc7 100644 --- a/server/controllers/path.go +++ b/server/controllers/path.go @@ -27,7 +27,7 @@ func Path(c *gin.Context) { if err != nil { // folder model not exist if file == nil { - c.JSON(200, MetaResponse(404, "path not found.")) + c.JSON(200, MetaResponse(404, "path not found.(第一次请先点击网页底部rebuild)")) return } c.JSON(200, MetaResponse(500, err.Error())) diff --git a/server/models/create.go b/server/models/create.go index 6af4a50e..bf4258d5 100644 --- a/server/models/create.go +++ b/server/models/create.go @@ -62,42 +62,49 @@ func BuildOne(parent string, path string, tx *gorm.DB, parentPassword string, dr if depth == 0 { return nil } - files, err := alidrive.GetList(parent, conf.Conf.AliDrive.MaxFilesCount, "", "", "", drive) - if err != nil { - return err - } - for _, file := range files.Items { - name := file.Name - if strings.HasSuffix(name, ".hide") { - continue + marker := "first" + for marker != "" { + if marker == "first" { + marker = "" } - password := parentPassword - if strings.Contains(name, ".password-") { - index := strings.Index(name, ".password-") - name = file.Name[:index] - password = file.Name[index+10:] - } - newFile := File{ - Dir: path, - FileExtension: file.FileExtension, - FileId: file.FileId, - Name: name, - Type: file.Type, - UpdatedAt: file.UpdatedAt, - Category: file.Category, - ContentType: file.ContentType, - Size: file.Size, - Password: password, - ContentHash: file.ContentHash, - } - log.Debugf("插入file:%+v", newFile) - if err := tx.Create(&newFile).Error; err != nil { + files, err := alidrive.GetList(parent, conf.Conf.AliDrive.MaxFilesCount, marker, "", "", drive) + if err != nil { return err } - if file.Type == "folder" { - if err := BuildOne(file.FileId, fmt.Sprintf("%s%s/", path, name), tx, password, drive, depth-1); err != nil { + marker = files.NextMarker + for _, file := range files.Items { + name := file.Name + if strings.HasSuffix(name, ".hide") { + continue + } + password := parentPassword + if strings.Contains(name, ".password-") { + index := strings.Index(name, ".password-") + name = file.Name[:index] + password = file.Name[index+10:] + } + newFile := File{ + Dir: path, + FileExtension: file.FileExtension, + FileId: file.FileId, + Name: name, + Type: file.Type, + UpdatedAt: file.UpdatedAt, + Category: file.Category, + ContentType: file.ContentType, + Size: file.Size, + Password: password, + ContentHash: file.ContentHash, + } + log.Debugf("插入file:%+v", newFile) + if err := tx.Create(&newFile).Error; err != nil { return err } + if file.Type == "folder" { + if err := BuildOne(file.FileId, fmt.Sprintf("%s%s/", path, name), tx, password, drive, depth-1); err != nil { + return err + } + } } } return nil