简介
本文档提供关于批量复制文件的 API 概览以及 SDK 示例代码。
API | 操作描述 |
批量复制文件 |
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";// 上一步返回的 taskIdreq.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";// 保存网盘时需要 shareAccessTokenreq.shareAccessToken = @"shareAccessToken";QCloudSMHBatchCopyInfo *info = [QCloudSMHBatchCopyInfo new];// 源路径info.from = @"fromPath";// 目标路径info.to = @"toPath";info.conflictStrategy = QCloudSMHConflictStrategyEnumRename;// 实现保存网盘是需要 shareAccessToken fromSpaceId fromLibraryIdif (shareAccessToken) {info.fromSpaceId = @"fromSpaceId";info.fromLibraryId = @"fromLibraryId";}req.batchInfos = @[info];[req setFinishBlock:^(QCloudSMHBatchResult *result, NSError *_Nullable error) {}];[[QCloudSMHService defaultSMHService] copyObject:req];