有奖捉虫:行业应用 & 管理与支持文档专题 HOT

简介

本文档提供关于批量复制文件的 API 概览以及 SDK 示例代码。
API
操作描述
批量复制文件

SDK API 参考

SDK 所有接口的具体参数与方法说明,请参见 SDK API 参考

批量复制文件

功能说明

用于批量复制目录或文件,不支持跨空间复制。
当项目较多以异步方式复制时,返回 HTTP 202 Accepted。
当项目较少以同步方式复制时,返回 HTTP 200 OK(全部执行成功)或 HTTP 207 Multi-Status(存在部分或全部执行失败)。

批量复制文件代码

开始批量复制

QCloudSMHBatchCopyRequest *req = [QCloudSMHBatchCopyRequest new];
req.spaceId = @"spaceId";
req.libraryId = @"libraryId";
// 实现保存网盘功能时需要该参数
req.shareAccessToken = @"shareAccessToken";
QCloudSMHBatchCopyInfo *info = [QCloudSMHBatchCopyInfo new];
// 原路径
info.from = @"from";
// 目标路径
info.to = @"target";
// fromLibraryId fromSpaceId 参数用来实现保存网盘功能。需要和 shareAccessToken 一起使用。
info.fromLibraryId = @"fromLibraryId";
info.fromSpaceId = @"fromSpaceId";
// 是否移动权限
info.moveAuthority = YES;
// 文件名与目标路径冲突时解决策略
info.conflictStrategy = QCloudSMHConflictStrategyEnumRename;
req.batchInfos = @[info];
[req setFinishBlock:^(QCloudSMHBatchResult *result, NSError * _Nullable error) {
//如果是同步任务,从 http 的状态码中获取任务的状态
QCloudSMHBatchTaskStatus status = QCloudSMHBatchTaskStatusTypeFromStatus([result __originHTTPURLResponse__].statusCode);
result.status = status;
if(status != QCloudSMHBatchTaskStatusWating || error){
// 当任务状态非等待或者有 error 时结束
if(self.finishBlock){
self.finishBlock(result, error);
}
}else{
// 使用返回的 taskid 进行轮询任务状态
result.taskId;
}
}];
[[QCloudSMHService defaultSMHService]batchCopy:req];


查询任务状态

这里需要进行轮询任务状态,直到查询到任务结果。
QCloudGetTaskStatusRequest *req = [QCloudGetTaskStatusRequest new];
req.spaceId = @"spaceId";
req.libraryId = @"libraryId";
// 上一步返回的 taskId
req.taskIdList = @[taskId];
[req setFinishBlock:^(NSArray * _Nonnull result, NSError * _Nonnull error) {

}];
[[QCloudSMHService defaultSMHService] getTaskStatus:req];

高级批量复制示例代码

该接口封装了批量复制以及轮询任务状态,setFinishBlock 直接返回最终任务结果,无需手动查询任务状态。
QCloudSMHCopyObjectRequest *req = [QCloudSMHCopyObjectRequest new];
req.libraryId = @"libraryId";
req.spaceId = @"spaceId";
// 保存网盘时需要 shareAccessToken
req.shareAccessToken = @"shareAccessToken";

QCloudSMHBatchCopyInfo *info = [QCloudSMHBatchCopyInfo new];
// 源路径
info.from = @"fromPath";
// 目标路径
info.to = @"toPath";
info.conflictStrategy = QCloudSMHConflictStrategyEnumRename;
// 实现保存网盘是需要 shareAccessToken fromSpaceId fromLibraryId
if (shareAccessToken) {
info.fromSpaceId = @"fromSpaceId";
info.fromLibraryId = @"fromLibraryId";
}
req.batchInfos = @[info];
[req setFinishBlock:^(QCloudSMHBatchResult *result, NSError *_Nullable error) {

}];
[[QCloudSMHService defaultSMHService] copyObject:req];