前期准备
开始操作前,确保您已经完成了 SDK 初始化。如果您还没有初始化 SDK,请先参考快速入门文档完成。
注意:
如果媒体库启用回收站功能,删除目录时会将目录及其下的文件移入回收站而非永久删除。
当目录内容较多时,复制操作会以异步方式执行,返回任务 ID。
列出目录内容
列出目录内容(marker 翻页,推荐)
ListDirectory 用于获取指定目录下的所有文件和子目录,推荐使用 marker 方式翻页。// 使用 marker/limit 分页查询(推荐)ctx := context.Background()resp, httpRes, err := apiClient.DirectoryAPI.ListDirectory(ctx, "your-library-id", "your-space-id", "/images").ByMarker(1).Limit(20).OrderBy("creationTime").OrderByType("desc").Filter("onlyFile").SortType("union").WithInode(1).WithFavoriteStatus(1).AccessToken("your-access-token").UserId("user-id").Execute()if err != nil {panic(err)}if httpRes.StatusCode == 200 {for _, item := range resp.Contents {fmt.Println(*item.Name)}}// 获取下一页:将上一次响应中的 nextMarker 作为 marker 传入if resp.NextMarker != nil {resp2, _, err := apiClient.DirectoryAPI.ListDirectory(ctx, "your-library-id", "your-space-id", "/images").ByMarker(1).Marker(*resp.NextMarker).Limit(20).AccessToken("your-access-token").Execute()if err != nil {panic(err)}fmt.Printf("下一页条目数: %d\\n", len(resp2.Contents))}
参数说明:
参数名 | 参数描述 | 类型 | 是否必填 |
libraryId | 媒体库 ID | String | 是 |
spaceId | 空间 ID | String | 是 |
dirPath | 目录路径,对于多级目录,使用斜杠(/)分隔,例如 foo/bar | String | 是 |
marker | 用于顺序列出分页的标识,不传/为空则默认第一页 | String | 否 |
limit | 用于顺序列出分页时本地列出的项目数限制,不传默认 20,最大 1000 | int32 | 否 |
orderBy | 排序字段,可选值:name、modificationTime、size、creationTime、localCreationTime | String | 否 |
orderByType | 排序方式,升序为 asc,降序为 desc | String | 否 |
filter | 筛选方式,不传返回全部,onlyDir 只返回文件夹,onlyFile 只返回文件 | String | 否 |
sortType | 排序方式,不传则文件和文件夹单独排序,先返回文件夹后返回文件。union 文件和文件夹拉通排序 | String | 否 |
withInode | 是否返回 inode(文件目录 ID),0 或 1,默认不返回 | int32 | 否 |
withFavoriteStatus | 是否返回收藏状态,0 或 1,默认不返回 | int32 | 否 |
userId | 用户身份识别,当访问令牌对应的权限为管理员权限且申请访问令牌时的用户身份识别为空时用来临时指定用户身份 | String | 否 |
返回值说明:
HTTP 状态码:200,获取成功,返回目录内容列表。
字段 | 说明 | 类型 |
contents | 目录内容列表 | Array |
nextMarker | 用于顺序列出分页的标识,为空表示已翻页完毕 | String |
列出目录内容(传统分页,不推荐)
ListDirectoryByPage 用于获取指定目录下的所有文件和子目录,使用传统分页方式。不推荐使用,建议使用 marker 方式翻页。// 使用 page/pageSize 分页查询(不推荐,page × pageSize 最大翻页条目数为 1 万)ctx := context.Background()resp, httpRes, err := apiClient.DirectoryAPI.ListDirectoryByPage(ctx, "your-library-id", "your-space-id", "/images").ByPage(1).Page(1).PageSize(20).OrderBy("creationTime").OrderByType("desc").Filter("onlyFile").SortType("union").AccessToken("your-access-token").UserId("user-id").Execute()if err != nil {panic(err)}if httpRes.StatusCode == 200 {fmt.Printf("总数: %d, 文件数: %d, 子目录数: %d\\n",*resp.TotalNum, *resp.FileCount, *resp.SubDirCount)for _, item := range resp.Contents {fmt.Println(*item.Name)}}
参数说明:
参数名 | 参数描述 | 类型 | 是否必填 |
libraryId | 媒体库 ID | String | 是 |
spaceId | 空间 ID | String | 是 |
dirPath | 目录路径,对于多级目录,使用斜杠(/)分隔,例如 foo/bar | String | 是 |
page | 页码,不传默认 1 | int32 | 否 |
pageSize | 每页数量,不传默认 20;page × pageSize 的最大翻页条目数为 1 万 | int32 | 否 |
orderBy | 排序字段,可选值:name、modificationTime、size、creationTime、localCreationTime | String | 否 |
orderByType | 排序方式,升序为 asc,降序为 desc | String | 否 |
filter | 筛选方式,不传返回全部,onlyDir 只返回文件夹,onlyFile 只返回文件 | String | 否 |
sortType | 排序方式,不传则文件和文件夹单独排序,先返回文件夹后返回文件。union 文件和文件夹拉通排序 | String | 否 |
withInode | 是否返回 inode(文件目录 ID),0 或 1,默认不返回 | int32 | 否 |
withFavoriteStatus | 是否返回收藏状态,0 或 1,默认不返回 | int32 | 否 |
userId | 用户身份识别,当访问令牌对应的权限为管理员权限且申请访问令牌时的用户身份识别为空时用来临时指定用户身份 | String | 否 |
返回值说明:
HTTP 状态码:200,获取成功,返回目录内容列表。
字段 | 说明 | 类型 |
fileCount | 当前目录文件数量 | Int32 |
subDirCount | 当前目录子目录数量 | Int32 |
totalNum | 条目总数 | Int32 |
contents | 目录内容列表 | Array |
目录信息
查看目录详情
InfoFileOrDirectory 用于获取指定路径的详细信息,可同时用于查看文件或文件夹详情。// 获取目录详情ctx := context.Background()resp, httpRes, err := apiClient.DirectoryAPI.InfoFileOrDirectory(ctx, "your-library-id", "your-space-id", "/documents").Info(1).WithInode(1).WithFavoriteStatus(1).AccessToken("your-access-token").Execute()if err != nil {panic(err)}if httpRes.StatusCode == 200 {fmt.Printf("名称: %s, 类型: %s\\n", *resp.Name, *resp.Type)}
参数说明:
参数名 | 参数描述 | 类型 | 是否必填 |
libraryId | 媒体库 ID | String | 是 |
spaceId | 空间 ID | String | 是 |
path | 文件或目录路径 | String | 是 |
info | 获取详细信息标志,固定值为 1 | float32 | 是 |
withInode | 是否返回 inode(文件目录 ID),0 或 1,默认不返回 | int32 | 否 |
withFavoriteStatus | 是否返回收藏状态,0 或 1,默认不返回 | int32 | 否 |
返回值说明:
HTTP 状态码:200,查询成功,返回文件或目录详情。
字段 | 说明 | 类型 |
path | 完整路径 | Array |
inode | 文件或目录 ID | String |
name | 文件或目录名 | String |
type | 条目类型(dir/file/image/video/symlink/virtual) | String |
userId | 创建人 ID | String |
creationTime | 创建时间 | String |
modificationTime | 修改时间 | String |
contentType | 媒体类型 | String |
size | 文件大小 | String |
eTag | ETag | String |
isFavorite | 是否收藏 | Boolean |
crc64 | CRC64 校验值 | String |
versionId | 版本号 | Integer |
metaData | 元数据 | Object |
labels | 标签列表 | Array |
category | 自定义分类 | String |
检查目录状态
CheckDirectoryStatus 用于检查指定目录是否存在。ctx := context.Background()httpRes, err := apiClient.DirectoryAPI.CheckDirectoryStatus(ctx, "your-library-id", "your-space-id", "/documents").AccessToken("your-access-token").UserId("user-id").Execute()if err != nil {panic(err)}if httpRes.StatusCode == 200 {fmt.Println("目录存在")}
参数说明:
参数名 | 参数描述 | 类型 | 是否必填 |
libraryId | 媒体库 ID | String | 是 |
spaceId | 空间 ID | String | 是 |
dirPath | 目录路径 | String | 是 |
userId | 用户身份识别 | String | 否 |
返回值说明:
HTTP 状态码:200,目录存在。
查询目录统计数据
GetDirectoryStats 用于获取指定目录下的文件总大小、文件数量以及子目录数量,支持查询普通目录、回收站目录以及历史版本的统计量。ctx := context.Background()resp, httpRes, err := apiClient.DirectoryAPI.GetDirectoryStats(ctx, "your-library-id", "your-space-id", "/documents").Stats(1).StatsType("normal").AccessToken("your-access-token").UserId("user-id").Execute()if err != nil {panic(err)}fmt.Printf("Directory stats retrieved successfully: %d\\n", httpRes.StatusCode)if resp.Storage != nil {fmt.Printf("Storage: %d bytes\\n", *resp.Storage)}
参数说明:
参数名 | 类型 | 必填 | 说明 |
libraryId | string | 是 | 媒体库 ID |
spaceId | string | 是 | 空间 ID,如果媒体库为单租户模式,则该参数固定为连字符(-);如果媒体库为多租户模式,则必须指定该参数 |
filePath | string | 是 | 目录路径 |
stats | int32 | 是 | 固定值为 1,表示查询目录统计数据 |
statsType | string | 是 | 统计类型,normal 表示普通目录统计量,recycle 表示回收站目录统计量,history 表示目录的历史版本统计量 |
recycledId | string | 否 | 回收站项目 ID,查询回收站的统计量时,为必选参数(根目录除外) |
accessToken | string | 否 | 访问令牌,对于公有读媒体库或租户空间,可不指定该参数,否则必须指定该参数 |
librarySecret | string | 否 | 访问媒体库密钥,可选参数 |
userId | string | 否 | 用户身份识别,当访问令牌对应的权限为管理员权限且申请访问令牌时的用户身份识别为空时用来临时指定用户身份,详情请参阅生成访问令牌接口 |
返回值说明:
HTTP 状态码:200,查询成功,返回目录统计信息。
响应示例:
{"userId": "user123","statsType": "normal","storage": 5558728615,"fileCount": 1024,"dirCount": 50}
响应字段说明:
字段 | 说明 | 类型 |
userId | 创建人 ID | String |
statsType | 查询类型 | String |
storage | 目录下所有文件总大小(字节),包含子目录文件;查询类型为历史版本时,为目录下所有文件历史版本总大小(字节) | Int64 |
fileCount | 目录下所有文件数量,包含子目录文件;查询类型为历史版本时,为目录下所有文件的历史版本个数 | Int64 |
dirCount | 目录下所有子目录数量;查询类型为历史版本时,该值始终为 0 | Int64 |
目录管理
创建目录
CreateDirectory 用于在指定路径创建新的目录,会自动创建中间所需的各级父目录。ctx := context.Background()meta := map[string]string{"department": "engineering","project": "sdk-v2",}createDirBody := client.CreateDirectoryRequest{MetaData: &meta,Labels: []string{"重要", "项目文档"},LocalCreationTime: client.PtrTime(time.Now()),LocalModificationTime: client.PtrTime(time.Now()),}resp, httpRes, err := apiClient.DirectoryAPI.CreateDirectory(ctx, "your-library-id", "your-space-id", "/project-docs").ConflictResolutionStrategy("rename").WithInode(1).CreateDirectoryRequest(createDirBody).AccessToken("your-access-token").Execute()if err != nil {panic(err)}if httpRes.StatusCode == 201 {fmt.Printf("目录创建成功: %v\\n", resp.Path)}
参数说明:
参数名 | 参数描述 | 类型 | 是否必填 |
libraryId | 媒体库 ID | String | 是 |
spaceId | 空间 ID | String | 是 |
dirPath | 目录路径 | String | 是 |
conflictResolutionStrategy | 最后一级目录冲突时的处理方式,ask: 冲突时返回 HTTP 409,rename: 冲突时自动重命名,默认为 ask | String | 否 |
withInode | 是否返回 inode(文件目录 ID),0 或 1,默认不返回 | int32 | 否 |
userId | 用户身份识别 | String | 否 |
createDirectoryRequest | 可选的请求体,用于指定目录的元数据信息 | CreateDirectoryRequest | 否 |
createDirectoryRequest 对象说明:
字段 | 参数描述 | 类型 | 是否必填 |
metaData | 自定义元数据键值对,key 为小写字符串 | map[string]string | 否 |
labels | 目录标签列表 | []string | 否 |
localCreationTime | 目录对应的本地创建时间 | time.Time | 否 |
localModificationTime | 目录对应的本地修改时间 | time.Time | 否 |
返回值说明:
HTTP 状态码:201,创建成功。
字段 | 说明 | 类型 |
path | 最终的目录或相簿路径,可能因自动重命名与指定路径不同 | Array |
inode | 最后一级文件目录 ID(withInode=1 时返回) | String |
creationTime | 目录创建时间 | Time |
metaData | 自定义元数据 | Object |
labels | 标签列表 | Array |
localCreationTime | 本地创建时间 | Time |
localModificationTime | 本地修改时间 | Time |
复制目录
CopyDirectory 用于将目录复制到目标路径,会自动创建中间所需的各级父目录。当目录内容较多时以异步方式复制。// 复制(目录内容较多时可能转为异步任务)ctx := context.Background()resp202, resp200, httpRes, err := apiClient.DirectoryAPI.CopyDirectory(ctx, "your-library-id", "your-space-id", "/dest/images").ConflictResolutionStrategy("ask").CopyDirectoryRequest(client.CopyDirectoryRequest{CopyFrom: "/source/images",}).AccessToken("your-access-token").UserId("user-id").Execute()if err != nil {panic(err)}switch httpRes.StatusCode {case 200:fmt.Printf("同步复制成功,最终路径: %v\\n", resp200.Path)case 202:fmt.Printf("已转为异步复制任务,taskId: %d\\n", *resp202.TaskId)case 204:fmt.Println("同步复制成功")}
参数说明:
参数名 | 参数描述 | 类型 | 是否必填 |
libraryId | 媒体库 ID | String | 是 |
spaceId | 空间 ID | String | 是 |
dirPath | 目标目录路径 | String | 是 |
conflictResolutionStrategy | 最后一级目录冲突时的处理方式,ask 或 rename,默认为 ask | String | 否 |
userId | 用户身份识别 | String | 否 |
copyDirectoryRequest | 复制目录请求对象 | CopyDirectoryRequest | 是 |
copyDirectoryRequest 对象说明:
字段 | 参数描述 | 类型 | 是否必填 |
copyFrom | 被复制的源目录或相簿路径 | String | 是 |
返回值说明:
HTTP 状态码 202:目录内容较多,以异步方式复制,返回 taskId。
HTTP 状态码 204:同步复制成功(conflictResolutionStrategy 为 ask)。
HTTP 状态码 200:同步复制成功(conflictResolutionStrategy 为 rename),返回最终路径。
重命名或移动目录
MoveDirectory 用于将目录移动到目标路径或重命名目录,可跨越多层级多目录。ctx := context.Background()resp, httpRes, err := apiClient.DirectoryAPI.MoveDirectory(ctx, "your-library-id", "your-space-id", "/dest/images").ConflictResolutionStrategy("ask").MoveDirectoryRequest(client.MoveDirectoryRequest{From: "/source/images",}).AccessToken("your-access-token").UserId("user-id").Execute()if err != nil {panic(err)}switch httpRes.StatusCode {case 200:fmt.Printf("同步移动成功,最终路径: %v\\n", resp.Path)case 204:fmt.Println("同步移动成功")}
参数说明:
参数名 | 参数描述 | 类型 | 是否必填 |
libraryId | 媒体库 ID | String | 是 |
spaceId | 空间 ID | String | 是 |
dirPath | 目标目录路径 | String | 是 |
conflictResolutionStrategy | 最后一级目录冲突时的处理方式,ask 或 rename,默认为 ask | String | 否 |
userId | 用户身份识别 | String | 否 |
moveDirectoryRequest | 移动目录请求对象 | MoveDirectoryRequest | 是 |
moveDirectoryRequest 对象说明:
字段 | 参数描述 | 类型 | 是否必填 |
from | 源目录路径 | String | 是 |
返回值说明:
HTTP 状态码 204:同步移动成功(conflictResolutionStrategy 为 ask)。
HTTP 状态码 200:同步移动成功(conflictResolutionStrategy 为 rename),返回最终路径。
删除目录
DeleteDirectory 用于删除指定目录及其下的所有文件。如果媒体库启用回收站功能,则移入回收站而非永久删除。// 移入回收站ctx := context.Background()resp, httpRes, err := apiClient.DirectoryAPI.DeleteDirectory(ctx, "your-library-id", "your-space-id", "/old-folder").Permanent(0).AccessToken("your-access-token").UserId("user-id").Execute()if err != nil {panic(err)}if httpRes.StatusCode == 200 && resp.RecycledItemId != nil {fmt.Printf("目录已移入回收站,回收站项目 ID: %d\\n", *resp.RecycledItemId)} else if httpRes.StatusCode == 204 {fmt.Println("目录已永久删除")}
参数说明:
参数名 | 参数描述 | 类型 | 是否必填 |
libraryId | 媒体库 ID | String | 是 |
spaceId | 空间 ID | String | 是 |
dirPath | 目录路径 | String | 是 |
permanent | 当媒体库开启回收站时,1: 永久删除,0: 移入回收站,默认为 0 | int32 | 否 |
userId | 用户身份识别 | String | 否 |
返回值说明:
HTTP 状态码 204:删除成功(未开启回收站)。
HTTP 状态码 200:删除成功(开启回收站),返回回收站项目 ID。
字段 | 说明 | 类型 |
recycledItemId | 回收站项目 ID | Number |
修正目录统计数据
CalibrateDirectoryStats 用于修正指定目录的统计数据(异步执行,返回 taskId,可通过任务管理接口查询执行结果)。ctx := context.Background()resp, httpRes, err := apiClient.DirectoryAPI.CalibrateDirectoryStats(ctx, "your-library-id", "your-space-id", "/documents").Calibrate(1).StatsType("normal").AccessToken("your-access-token").Execute()if err != nil {panic(err)}if httpRes.StatusCode == 200 && resp.TaskId != nil {fmt.Printf("校准任务已提交,taskId: %d\\n", *resp.TaskId)}
参数说明:
参数名 | 参数描述 | 类型 | 是否必填 |
libraryId | 媒体库 ID | string | 是 |
spaceId | 空间 ID,如果媒体库为单租户模式,则该参数固定为连字符(-);如果媒体库为多租户模式,则必须指定该参数 | string | 是 |
filePath | 目录路径 | string | 是 |
calibrate | 固定值为 1,表示修正目录统计数据 | int32 | 是 |
statsType | 统计类型,normal 表示普通目录统计量,recycle 表示回收站目录统计量,history 表示目录的历史版本统计量 | string | 是 |
recycledId | 回收站项目 ID,查询回收站的统计量时,为必选参数(根目录除外) | string | 否 |
accessToken | 访问令牌 | string | 否 |
userId | 用户身份识别 | string | 否 |
返回值说明:
HTTP 状态码:200,返回 taskId(int64),异步任务,可通过任务管理接口查询执行结果。
标签与分类
更新目录标签
UpdateDirectoryLabels 用于更新目录的标签信息。ctx := context.Background()httpRes, err := apiClient.DirectoryAPI.UpdateDirectoryLabels(ctx, "your-library-id", "your-space-id", "/documents").Update(1).UpdateDirectoryLabelsRequest(client.UpdateDirectoryLabelsRequest{Labels: []string{"tag1", "tag2", "important"},}).AccessToken("your-access-token").Execute()if err != nil {panic(err)}if httpRes.StatusCode == 204 {fmt.Println("目录标签更新成功")}
参数说明:
参数名 | 参数描述 | 类型 | 是否必填 |
libraryId | 媒体库 ID | String | 是 |
spaceId | 空间 ID | String | 是 |
dirPath | 目录路径 | String | 是 |
update | 固定为 1 | float32 | 是 |
updateDirectoryLabelsRequest | 更新目录标签请求对象 | UpdateDirectoryLabelsRequest | 否 |
updateDirectoryLabelsRequest 对象说明:
字段 | 参数描述 | 类型 | 是否必填 |
labels | 文件标签列表 | []string | 否 |
metaData | 自定义元数据 | map[string]string | 否 |
metaDataDirective | 元数据更新策略,merge: 合并,replace: 替换 | String | 否 |
返回值说明:
HTTP 状态码:204,更新成功,无响应体。
更新文件标签或分类
UpdateFileLabels 用于更新文件的标签(Labels)或分类(Category)。// 更新文件标签和分类ctx := context.Background()httpRes, err := apiClient.DirectoryAPI.UpdateFileLabels(ctx, "your-library-id", "your-space-id", "/text.txt").Update(1).UpdateFileLabelsRequest(client.UpdateFileLabelsRequest{Labels: []string{"动物", "大象", "亚洲象"},Category: client.PtrString("image"),LocalCreationTime: client.PtrTime(time.Now()),LocalModificationTime: client.PtrTime(time.Now()),}).AccessToken("your-access-token").Execute()if err != nil {panic(err)}if httpRes.StatusCode == 204 {fmt.Println("文件标签更新成功")}
参数说明:
参数名 | 参数描述 | 类型 | 是否必填 |
libraryId | 媒体库 ID | String | 是 |
spaceId | 空间 ID | String | 是 |
path | 文件路径 | String | 是 |
update | 固定为 1 | float32 | 是 |
updateFileLabelsRequest | 更新文件标签请求对象 | UpdateFileLabelsRequest | 是 |
updateFileLabelsRequest 对象说明:
字段 | 参数描述 | 类型 | 是否必填 |
labels | 文件标签列表 | []string | 否 |
category | 文件自定义的分类,最大长度 16 字节 | String | 否 |
metaData | 自定义元数据 | map[string]string | 否 |
metaDataDirective | 元数据更新策略,merge: 合并,replace: 替换 | String | 否 |
localCreationTime | 文件对应的本地创建时间 | time.Time | 否 |
localModificationTime | 文件对应的本地修改时间 | time.Time | 否 |
contentType | 媒体类型 | String | 否 |
size | 虚拟文件大小(字节) | String | 否 |
返回值说明:
HTTP 状态码:204,更新成功,无响应体。