前期准备
开始操作前,确保您已经完成了 SDK 初始化。如果您还没有初始化 SDK,请先参考快速入门文档完成。
注意事项:
批量操作不保证事务性,部分操作可能成功,部分操作可能失败。
批量移动时,如果目标空间的文件已开启历史版本,不支持 overwrite 覆盖移动。
批量复制
功能说明
batchCopy 实现批量复制目录或文件到指定位置,支持设置冲突解决策略。当操作数量较多或文件较大时,系统会返回异步任务 ID,需要通过任务 ID 查询任务状态。使用示例
const res = await smh.batch.batchCopy({spaceId: 'space-id-1',copy: 1,batchCopyRequest: [{copyFrom: '/source/xxx',to: '/dest/xxx',conflictResolutionStrategy: 'rename'},{copyFrom: '/source/xxx',to: '/dest/xxx',conflictResolutionStrategy: 'overwrite'}],userId: 'xxx'});if (res.status === 200) {console.log('批量复制成功', res.data);} else if (res.status === 202) {console.log('异步任务已创建,任务ID:', res.data.taskId);} else if (res.status === 207) {console.log('部分操作失败', res.data);}
参数说明:
参数名 | 参数描述 | 类型 | 是否必填 |
spaceId | 空间 ID,如果媒体库为单租户模式,则该参数固定为连字符(-);如果媒体库为多租户模式,则必须指定该参数 | String | 是 |
copy | 开启批量复制操作,固定值为 1 | Number | 是 |
batchCopyRequest | 批量复制请求数组 | Array | 是 |
userId | 用户身份识别,当访问令牌对应的权限为管理员权限且申请访问令牌时的用户身份识别为空时用来临时指定用户身份 | String | 否 |
batchCopyRequest 数组元素说明:
参数名 | 参数描述 | 类型 | 是否必填 |
copyFrom | 源文件或目录路径 | String | 是 |
copyFromSpaceId | 跨空间复制时的源空间 ID,不跨空间时不传 | String | 否 |
to | 目标文件或目录路径 | String | 是 |
conflictResolutionStrategy | 冲突解决策略,可选值: rename(重命名)、overwrite(覆盖)、ask(询问) | String | 否 |
返回值说明:
HTTP 状态码:200
批量复制成功。
HTTP 状态码:202
异步任务已创建,返回
taskId 用于查询任务状态。HTTP 状态码:207
部分操作失败,返回详细的失败信息。
响应示例:
{"taskId": 12345678}
响应字段说明:
字段 | 说明 | 类型 |
taskId | 异步任务 ID,当状态码为 202 时返回,用于查询任务状态 | Number |
result | 当状态码为 200/207 时返回,逐项结果数组,每项含:status(单项 HTTP 状态,200 表示 rename 复制成功、204 表示 ask/overwrite 复制成功、403/404/409/500 等表示失败)、path(最终路径)、copyFrom(源路径)、to(目标路径) | Array |
批量移动
功能说明
batchMove 实现批量移动或重命名目录或文件,支持设置冲突解决策略。当操作数量较多或文件较大时,系统会返回异步任务 ID,需要通过任务 ID 查询任务状态。使用示例
const res = await smh.batch.batchMove({spaceId: 'space-id-1',move: 1,batchMoveRequest: [{from: '/source/xxx',to: '/dest/xxx',conflictResolutionStrategy: 'rename'},{from: '/source/xxx',to: '/dest/xxx',conflictResolutionStrategy: 'overwrite'}],userId: 'xxx'});if (res.status === 200) {console.log('批量移动成功', res.data);} else if (res.status === 202) {console.log('异步任务已创建,任务ID:', res.data.taskId);} else if (res.status === 207) {console.log('部分操作失败', res.data);}
参数说明:
参数名 | 参数描述 | 类型 | 是否必填 |
spaceId | 空间 ID,如果媒体库为单租户模式,则该参数固定为连字符(-);如果媒体库为多租户模式,则必须指定该参数 | String | 是 |
move | 开启批量移动操作,固定值为 1 | Number | 是 |
batchMoveRequest | 批量移动请求数组 | Array | 是 |
userId | 用户身份识别,当访问令牌对应的权限为管理员权限且申请访问令牌时的用户身份识别为空时用来临时指定用户身份 | String | 否 |
batchMoveRequest 数组元素说明:
参数名 | 参数描述 | 类型 | 是否必填 |
from | 源文件或目录路径 | String | 是 |
fromSpaceId | 跨空间移动时的源空间 ID,不跨空间时不传 | String | 否 |
to | 目标文件或目录路径 | String | 是 |
conflictResolutionStrategy | 冲突解决策略,可选值: rename(重命名)、overwrite(覆盖)、ask(询问) | String | 否 |
返回值说明:
HTTP 状态码:200
批量移动成功。
HTTP 状态码:202
异步任务已创建,返回
taskId 用于查询任务状态。HTTP 状态码:207
部分操作失败,返回详细的失败信息。
响应示例:
{"taskId": 12345678}
响应字段说明:
字段 | 说明 | 类型 |
taskId | 异步任务 ID,当状态码为 202 时返回,用于查询任务状态 | Number |
result | 当状态码为 200/207 时返回,逐项结果数组,每项含:status(200 表示 rename 成功、204 表示 ask/overwrite 成功、403/404/409/500 等表示失败)、path(最终路径)、from(源路径)、to(目标路径) | Array |
批量删除
功能说明
batchDelete 实现批量删除目录或文件,支持永久删除或移至回收站。当操作数量较多或文件较大时,系统会返回异步任务 ID,需要通过任务 ID 查询任务状态。使用示例
const res = await smh.batch.batchDelete({spaceId: 'space-id-1',_delete: 1,batchDeleteRequest: [{ path: '/test/xxx' },{ path: '/test/xxx', permanent: true },{ path: '/test/xxx' }],userId: 'xxx'});if (res.status === 200) {console.log('批量删除成功', res.data);} else if (res.status === 202) {console.log('异步任务已创建,任务ID:', res.data.taskId);} else if (res.status === 207) {console.log('部分操作失败', res.data);}
参数说明:
参数名 | 参数描述 | 类型 | 是否必填 |
spaceId | 空间 ID,如果媒体库为单租户模式,则该参数固定为连字符(-);如果媒体库为多租户模式,则必须指定该参数 | String | 是 |
_delete | 开启批量删除操作,固定值为 1 | Number | 是 |
batchDeleteRequest | 批量删除请求数组 | Array | 是 |
userId | 用户身份识别,当访问令牌对应的权限为管理员权限且申请访问令牌时的用户身份识别为空时用来临时指定用户身份 | String | 否 |
batchDeleteRequest 数组元素说明:
参数名 | 参数描述 | 类型 | 是否必填 |
path | 要删除的文件或目录路径 | String | 是 |
permanent | 是否永久删除, true 表示永久删除,false 表示移至回收站。默认为 false | Boolean | 否 |
返回值说明:
HTTP 状态码:200
批量删除成功。
HTTP 状态码:202
异步任务已创建,返回
taskId 用于查询任务状态。HTTP 状态码:207
部分操作失败,返回详细的失败信息。
响应示例:
{"taskId": 12345678}
响应字段说明:
字段 | 说明 | 类型 |
taskId | 异步任务 ID,当状态码为 202 时返回,用于查询任务状态 | Number |
result | 当状态码为 200/207 时返回,逐项结果数组,每项含:status(200 表示移入回收站成功、204 表示永久删除成功、403/404/500 等表示失败)、recycledItemId(回收站项目 ID,移入回收站时返回)、path(路径) | Array |
返回状态码说明:
字段 | 说明 | 类型 |
200 | 操作成功完成 | Number |
202 | 异步任务已创建,返回 taskId 用于查询任务状态 | Number |
207 | 部分操作失败,返回详细的失败信息 | Number |
异步便捷方法(WithAsync)
SMHClient 提供三个批量操作的异步便捷封装:
batchCopyWithAsync、batchMoveWithAsync、batchDeleteWithAsync。它们在接口返回 202(异步任务)时自动按 1 秒间隔轮询任务状态直到结束,直接返回最终结果,无需手动轮询。使用示例
// 批量复制(自动处理异步轮询)const result = await smh.batchCopyWithAsync({spaceId: 'your-space-id',batchCopyRequest: [{ copyFrom: '/documents/report.pdf', to: '/backup/report.pdf' },],});// result 为 BatchCopy200Response(同步完成)或 QueryTask200ResponseInner(异步任务结果)console.log('执行完成:', result);
说明
三个方法的请求体字段与对应批量接口一致(
batchCopyRequest / batchMoveRequest / batchDeleteRequest 数组)。轮询间隔固定 1 秒;任务达到终态(200/204/207/400/403/404/500)即返回,任务失败也会正常返回结果而不抛错,请检查返回的 status。
如需中途停止轮询,可通过参数的 onCleanup 回调获取停止函数。
文件文档转码另有对应的
convertFileWithAsync,回收站批量恢复另有 batchRestoreWithAsync。