详情页标题前

腾讯云对象存储复制与移动对象

详情页1

简介

文档提供关于复制、移动对象的 API 概览以及 SDK 示例代码。简单操作

API 操作名 操作描述
PUT Object – Copy 设置对象复制(修改对象属性) 复制文件到目标路径
DELETE Object 删除单个对象 在存储桶中删除指定对象

分块操作

API 操作名 操作描述
List Multipart Uploads 查询分块上传/复制 查询正在进行中的分块上传/复制信息
Initiate Multipart Upload 初始化分块上传/复制 初始化分块上传/复制操作
Upload Part – Copy 复制分块 将其他对象复制为一个分块
List Parts 查询已上传/复制块 查询特定分块操作中的已上传/复制的块
Complete Multipart Upload 完成分块上传/复制 完成整个文件的分块上传/复制
Abort Multipart Upload 终止分块上传/复制 终止一个分块操作并删除已上传/复制的块

SDK API 参考

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

高级接口(推荐)

复制对象

高级接口封装了简单复制、分块复制接口的异步请求,并支持暂停、恢复以及取消复制请求。

示例代码

Objective-C

QCloudCOSXMLCopyObjectRequest* request = [[QCloudCOSXMLCopyObjectRequest alloc] init];
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketrequest.bucket = @"examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"request.object = @"exampleobject";
// 文件来源存储桶,需要是公有读或者在当前账号有权限request.sourceBucket = @"sourcebucket-1250000000";
// 源文件名称request.sourceObject = @"sourceObject";
// 源文件的 APPIDrequest.sourceAPPID = @"1250000000";
// 来源的地域request.sourceRegion= @"COS_REGION";
[request setFinishBlock:^(QCloudCopyObjectResult* result, NSError* error) { // 可以从 outputObject 中获取 response 中 etag 或者自定义头部等信息}];
// 注意如果是跨地域复制,这里使用的 transferManager 所在的 region 必须为目标桶所在的 region[[QCloudCOSTransferMangerService defaultCOSTransferManager] CopyObject:request];
// 取消copy// 若需要取消copy 调用cancel方法[request cancel];

说明更多完整示例,请前往 GitHub 查看。Swift

let copyRequest =  QCloudCOSXMLCopyObjectRequest.init();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketcopyRequest.bucket = "examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"copyRequest.object = "exampleobject";
// 文件来源存储桶,需要是公有读或者在当前账号有权限// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketcopyRequest.sourceBucket = "sourcebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"copyRequest.sourceObject = "sourceObject";
// 源文件的 APPIDcopyRequest.sourceAPPID = "1250000000";
// 来源的地域copyRequest.sourceRegion = "COS_REGION";
copyRequest.setFinish { (copyResult, error) in if let copyResult = copyResult { // 文件的 etag let eTag = copyResult.eTag } else { print(error!); }
}// 注意如果是跨地域复制,这里使用的 transferManager 所在的 region 必须为目标桶所在的 regionQCloudCOSTransferMangerService.defaultCOSTransferManager().copyObject(copyRequest);
// 取消copy// 若需要取消copy 调用cancel方法copyRequest.cancel();

说明更多完整示例,请前往 GitHub 查看。

移动对象

移动对象主要包括两个操作:复制源对象到目标位置,删除源对象。由于 COS 通过存储桶名称(Bucket)和对象键(ObjectKey)来标识对象。移动对象也就意味着修改这个对象的标识,COS Java SDK 目前没有提供修改对象唯一标识名的单独接口,但是可以通过组合复制对象加上删除对象的基本操作,来达到修改对象标识的目的,从而实现移动对象。例如将 mybucket-1250000000 这个存储桶中的 picture.jpg 这个对象移动到同个存储桶的 doc 路径下。首先可以复制 picture.jpg 对象到存储桶的 doc 路径下,即对象键设定为 doc/picture.jpg,复制完成后删除 picture.jpg 这个对象,来实现“移动”的效果。同样的,如果想将 mybucket-1250000000 这个存储桶里的 picture.jpg 这个对象移动到 myanothorbucket-1250000000 这个存储桶里,可以先将对象复制到 myanothorbucket-1250000000 存储桶,然后删除原来的对象。

示例代码

Objective-C

QCloudCOSXMLCopyObjectRequest* request = [[QCloudCOSXMLCopyObjectRequest alloc] init];
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketrequest.bucket = @"examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "dir1/object1"request.object = @"exampleobject";
// 文件来源存储桶,需要是公有读或者在当前账号有权限request.sourceBucket = @"sourcebucket-1250000000";
// 源文件名称request.sourceObject = @"sourceObject";
// 源文件的 APPIDrequest.sourceAPPID = @"1250000000";
// 来源的地域request.sourceRegion= @"COS_REGION";
[request setFinishBlock:^(QCloudCopyObjectResult* result, NSError* error) { // 可以从 outputObject 中获取 response 中 etag 或者自定义头部等信息 if(!error){ QCloudDeleteObjectRequest* deleteObjectRequest = [QCloudDeleteObjectRequest new];
// 文件来源存储桶,需要是公有读或者在当前账号有权限 deleteObjectRequest.bucket = @"sourcebucket-1250000000";
// 源文件名称,是源对象在 COS 上的完整路径,如果带目录的话,格式为 "dir1/object1" deleteObjectRequest.object = @"sourceObject";
[deleteObjectRequest setFinishBlock:^(id outputObject, NSError *error) { // outputObject 包含所有的响应 http 头部 NSDictionary* info = (NSDictionary *) outputObject; }];
[[QCloudCOSXMLService defaultCOSXML] DeleteObject:deleteObjectRequest]; }}];
// 注意如果是跨地域移动,这里使用的 transferManager 所在的 region 必须为目标桶所在的 region[[QCloudCOSTransferMangerService defaultCOSTransferManager] CopyObject:request];

说明更多完整示例,请前往 GitHub 查看。Swift

let copyRequest =  QCloudCOSXMLCopyObjectRequest.init();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketcopyRequest.bucket = "examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "dir1/object1"copyRequest.object = "exampleobject";
// 文件来源存储桶,需要是公有读或者在当前账号有权限// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketcopyRequest.sourceBucket = "sourcebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "dir1/object1"copyRequest.sourceObject = "sourceObject";
// 源文件的 APPIDcopyRequest.sourceAPPID = "1250000000";
// 来源的地域copyRequest.sourceRegion = "COS_REGION";
copyRequest.setFinish { (copyResult, error) in if let copyResult = copyResult { // 文件的 etag let deleteObject = QCloudDeleteObjectRequest.init();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket deleteObject.bucket = "sourcebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "dir1/object1" deleteObject.object = "sourceObject";
deleteObject.finishBlock = {(result,error)in if let result = result { // result 包含响应的 header 信息 } else { print(error!); } } QCloudCOSXMLService.defaultCOSXML().deleteObject(deleteObject); } else { print(error!); }
}// 注意如果是跨地域移动,这里使用的 transferManager 所在的 region 必须为目标桶所在的 regionQCloudCOSTransferMangerService.defaultCOSTransferManager().copyObject(copyRequest);

说明更多完整示例,请前往 GitHub 查看。

简单操作

复制对象(修改属性)

复制文件到目标路径(PUT Object-Copy)。

示例代码一: 复制对象时保留对象属性

Objective-C

QCloudPutObjectCopyRequest* request = [[QCloudPutObjectCopyRequest alloc] init];// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketrequest.bucket = @"examplebucket-1250000000";// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"request.object = @"exampleobject";// 是否拷贝元数据,枚举值:Copy,Replaced,默认值 Copy。// 假如标记为 Copy,忽略 Header 中的用户元数据信息直接复制// 假如标记为 Replaced,按 Header 信息修改元数据。当目标路径和原路径一致,即用户试图修改元数据时,必须为 Replacedrequest.metadataDirective = @"Copy";// 定义 Object 的 ACL 属性,有效值:private,public-read,default。// 默认值:default(继承 Bucket 权限)。// 注意:如果您无需进行 Object ACL 控制,请填 default// 或者此项不进行设置,默认继承 Bucket 权限。request.accessControlList = @"default";// 源对象所在的路径request.objectCopySource =@"sourcebucket-1250000000.cos.ap-guangzhou.myqcloud.com/sourceObject";// 指定源文件的 versionID,只有开启或开启后暂停的存储桶,才会响应此参数request.versionID = @"objectVersion1";[request setFinishBlock:^(QCloudCopyObjectResult * _Nonnull result,                          NSError * _Nonnull error) {    // result 返回具体信息
}];[[QCloudCOSXMLService defaultCOSXML] PutObjectCopy:request];

说明更多完整示例,请前往 GitHub 查看。Swift

let putObjectCopy = QCloudPutObjectCopyRequest.init();// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketputObjectCopy.bucket = "examplebucket-1250000000";// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"putObjectCopy.object = "exampleobject";// 源对象所在的路径putObjectCopy.objectCopySource = "sourcebucket-1250000000.cos.ap-guangzhou.myqcloud.com/sourceObject";// 是否拷贝元数据,枚举值:Copy,Replaced,默认值 Copy。// 假如标记为 Copy,忽略 Header 中的用户元数据信息直接复制// 假如标记为 Replaced,按 Header 信息修改元数据。当目标路径和原路径一致,即用户试图修改元数据时,必须为 ReplacedputObjectCopy.metadataDirective = "Copy";// 定义 Object 的 ACL 属性,有效值:private,public-read,default。// 默认值:default(继承 Bucket 权限)。// 注意:如果您无需进行 Object ACL 控制,请填 default// 或者此项不进行设置,默认继承 Bucket 权限。putObjectCopy.accessControlList = "default";// 指定源文件的 versionID,只有开启或开启后暂停的存储桶,才会响应此参数putObjectCopy.versionID = "versionID";putObjectCopy.setFinish { (result, error) in    if let result = result {        let eTag = result.eTag    } else {        print(error!);    }}QCloudCOSXMLService.defaultCOSXML().putObjectCopy(putObjectCopy);

说明更多完整示例,请前往 GitHub 查看。

示例代码二: 复制对象时替换对象属性

Objective-C

QCloudPutObjectCopyRequest* request = [[QCloudPutObjectCopyRequest alloc] init];// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketrequest.bucket = @"examplebucket-1250000000";// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"request.object = @"exampleobject";// 是否拷贝元数据,枚举值:Copy,Replaced,默认值 Copy。// 假如标记为 Copy,忽略 Header 中的用户元数据信息直接复制// 假如标记为 Replaced,按 Header 信息修改元数据。当目标路径和原路径一致,即用户试图修改元数据时,必须为 Replacedrequest.metadataDirective = @"Replaced";// 修改元数据[request.customHeaders setValue:@"newValue" forKey:@"x-cos-meta-*"];// 对象存储类型,枚举值请参见 存储类型概述 文档,例如 MAZ_STANDARD,MAZ_STANDARD_IA,// STANDARD_IA,ARCHIVE。仅当对象不是标准存储(STANDARD)时才会返回该头部// 修改存储类型[request.customHeaders setValue:@"newValue" forKey:@"x-cos-storage-class"];// 定义 Object 的 ACL 属性,有效值:private,public-read,default。// 默认值:default(继承 Bucket 权限)。// 注意:如果您无需进行 Object ACL 控制,请填 default// 或者此项不进行设置,默认继承 Bucket 权限。// 修改aclrequest.accessControlList = @"private";// 源对象所在的路径request.objectCopySource =    @"sourcebucket-1250000000.cos.ap-guangzhou.myqcloud.com/sourceObject";
// 指定源文件的 versionID,只有开启或开启后暂停的存储桶,才会响应此参数request.versionID = @"objectVersion1";
[request setFinishBlock:^(QCloudCopyObjectResult * _Nonnull result, NSError * _Nonnull error) { // result 返回具体信息
}];[[QCloudCOSXMLService defaultCOSXML] PutObjectCopy:request];

说明更多完整示例,请前往 GitHub 查看。Swift

let request : QCloudPutObjectCopyRequest  = QCloudPutObjectCopyRequest();// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketrequest.bucket = "examplebucket-1250000000";// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"request.object = "exampleobject";// 是否拷贝元数据,枚举值:Copy,Replaced,默认值 Copy。// 假如标记为 Copy,忽略 Header 中的用户元数据信息直接复制// 假如标记为 Replaced,按 Header 信息修改元数据。当目标路径和原路径一致,即用户试图修改元数据时,必须为 Replacedrequest.metadataDirective = "Replaced";// 修改元数据request.customHeaders.setValue("newValue", forKey: "x-cos-meta-*");// 对象存储类型,枚举值请参见 存储类型概述 文档,例如 MAZ_STANDARD,MAZ_STANDARD_IA,// STANDARD_IA,ARCHIVE。仅当对象不是标准存储(STANDARD)时才会返回该头部// 修改存储类型request.customHeaders.setValue("newValue", forKey: "x-cos-storage-class");// 定义 Object 的 ACL 属性,有效值:private,public-read,default。// 默认值:default(继承 Bucket 权限)。// 注意:如果您无需进行 Object ACL 控制,请填 default// 或者此项不进行设置,默认继承 Bucket 权限。// 修改aclrequest.accessControlList = "源文件acl";// 源对象所在的路径request.objectCopySource = "sourcebucket-1250000000.cos.ap-guangzhou.myqcloud.com/sourceObject";// 指定源文件的 versionID,只有开启或开启后暂停的存储桶,才会响应此参数request.versionID = "versionID";request.setFinish { (result, error) in    if let result = result {        let eTag = result.eTag    } else {        print(error!);    }
}QCloudCOSXMLService.defaultCOSXML().putObjectCopy(request);

说明更多完整示例,请前往 GitHub 查看。

示例代码三: 修改对象元数据

Objective-C

QCloudPutObjectCopyRequest* request = [[QCloudPutObjectCopyRequest alloc] init];// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketrequest.bucket = @"examplebucket-1250000000";// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"request.object = @"exampleobject";// 是否拷贝元数据,枚举值:Copy,Replaced,默认值 Copy。// 假如标记为 Copy,忽略 Header 中的用户元数据信息直接复制// 假如标记为 Replaced,按 Header 信息修改元数据。当目标路径和原路径一致,即用户试图修改元数据时,必须为 Replacedrequest.metadataDirective = @"Replaced";// 自定义对象header[request.customHeaders setValue:@"newValue" forKey:@"x-cos-meta-*"];// 定义 Object 的 ACL 属性,有效值:private,public-read,default。// 默认值:default(继承 Bucket 权限)。// 注意:如果您无需进行 Object ACL 控制,请填 default// 或者此项不进行设置,默认继承 Bucket 权限。request.accessControlList = @"default";// 源对象所在的路径request.objectCopySource =    @"examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/exampleobject";
[request setFinishBlock:^(QCloudCopyObjectResult * _Nonnull result, NSError * _Nonnull error) { // result 返回具体信息
}];[[QCloudCOSXMLService defaultCOSXML] PutObjectCopy:request];

说明更多完整示例,请前往 GitHub 查看。Swift

let request : QCloudPutObjectCopyRequest = QCloudPutObjectCopyRequest();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketrequest.bucket = "examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"request.object = "exampleobject";
// 是否拷贝元数据,枚举值:Copy,Replaced,默认值 Copy。// 假如标记为 Copy,忽略 Header 中的用户元数据信息直接复制// 假如标记为 Replaced,按 Header 信息修改元数据。当目标路径和原路径一致// 即用户试图修改元数据时,必须为 Replacedrequest.metadataDirective = "Replaced";
// 自定义对象headerrequest.customHeaders.setValue("newValue", forKey: "x-cos-meta-*")
// 定义 Object 的 ACL 属性,有效值:private,public-read,default。// 默认值:default(继承 Bucket 权限)。// 注意:如果您无需进行 Object ACL 控制,请填 default// 或者此项不进行设置,默认继承 Bucket 权限。request.accessControlList = "default";
// 源对象所在的路径request.objectCopySource = "examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/exampleobject";
request.setFinish { (result, error) in if let result = result { // 生成的新文件的 etag let eTag = result.eTag } else { print(error!); }}
QCloudCOSXMLService.defaultCOSXML().putObjectCopy(request);

说明更多完整示例,请前往 GitHub 查看。

示例代码四: 修改对象存储类型

Objective-C

QCloudPutObjectCopyRequest* request = [[QCloudPutObjectCopyRequest alloc] init];
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketrequest.bucket = @"examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"request.object = @"exampleobject";
// 对象存储类型,枚举值请参见 存储类型概述 文档,例如 MAZ_STANDARD,MAZ_STANDARD_IA,// STANDARD_IA,ARCHIVE。仅当对象不是标准存储(STANDARD)时才会返回该头部[request.customHeaders setValue:@"ARCHIVE" forKey:@"x-cos-storage-class"];
// 源对象所在的路径request.objectCopySource = @"examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/exampleobject";
// 指定源文件的 versionID,只有开启或开启后暂停的存储桶,才会响应此参数request.versionID = @"";
[request setFinishBlock:^(QCloudCopyObjectResult * _Nonnull result, NSError * _Nonnull error) { // result 返回具体信息
}];[[QCloudCOSXMLService defaultCOSXML] PutObjectCopy:request];

说明更多完整示例,请前往 GitHub 查看。Swift

let request : QCloudPutObjectCopyRequest = QCloudPutObjectCopyRequest();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketrequest.bucket = "examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"request.object = "exampleobject";
// 对象存储类型,枚举值请参见 存储类型概述 文档,例如 MAZ_STANDARD,MAZ_STANDARD_IA,// STANDARD_IA,ARCHIVE。仅当对象不是标准存储(STANDARD)时才会返回该头部request.customHeaders.setValue("newValue", forKey: "x-cos-storage-class");// 源对象所在的路径request.objectCopySource = "examplebucket-1250000000.cos.ap-guangzhou.myqcloud.com/exampleobject";
request.setFinish { (result, error) in if let result = result { // 生成的新文件的 etag let eTag = result.eTag } else { print(error!); }}
QCloudCOSXMLService.defaultCOSXML().putObjectCopy(request);

说明更多完整示例,请前往 GitHub 查看。

分块操作

这里主要介绍分块复制的流程。分块复制和分块上传在涉及接口及使用上具有一定重合度。

分块复制的流程

1. 初始化分块复制(Initiate Multipart Upload),得到 UploadId。2. 使用 UploadId 复制分块(Upload Part – Copy)。3. 完成分块复制(Complete Multipart Upload)。

分块复制的流程

1. 如果没有记录 UploadId,查询分块复制任务(List Multipart Uploads),得到对应文件的 UploadId。2. 使用 UploadId 列出已复制的分块(List Parts)。3. 使用 UploadId 复制剩余的分块(Upload Part Copy)。4. 完成分块复制(Complete Multipart Upload)。

终止分块复制的流程

1. 如果没有记录 UploadId,查询分块复制任务(List Multipart Upload),得到对应文件的 UploadId2. 终止分块复制并删除已复制分块(Abort Multipart Upload)

查询分块复制

功能说明

查询指定存储桶中正在进行的分块复制(List Multipart Uploads),该接口与分块上传的查询分块上传接口一致。

示例代码

Objective-C

QCloudListBucketMultipartUploadsRequest* uploads = [QCloudListBucketMultipartUploadsRequest new];// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketuploads.bucket = @"examplebucket-1250000000";// 设置最大返回的 multipart 数量,合法取值从 1 到 1000uploads.maxUploads = 100;[uploads setFinishBlock:^(QCloudListMultipartUploadsResult* result,                          NSError *error) {    // 可以从 result 中返回分块信息    // 进行中的分块复制对象    NSArray *uploads = result.uploads;}];[[QCloudCOSXMLService defaultCOSXML] ListBucketMultipartUploads:uploads];

说明更多完整示例,请前往 GitHub 查看。Swift

let listParts = QCloudListBucketMultipartUploadsRequest.init();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketlistParts.bucket = "examplebucket-1250000000";
// 设置最大返回的 multipart 数量,合法取值从 1 到 1000listParts.maxUploads = 100;
listParts.setFinish { (result, error) in if let result = result { // 未完成的所有分块复制任务 let uploads = result.uploads; } else { print(error!); }}QCloudCOSXMLService.defaultCOSXML().listBucketMultipartUploads(listParts);

说明更多完整示例,请前往 GitHub 查看。

初始化分块复制

功能说明

初始化 Multipart Upload 复制操作,获取对应的 uploadId(Initiate Multipart Upload),该接口与分块上传的初始化分块上传接口一致。

示例代码

Objective-C

QCloudInitiateMultipartUploadRequest* initRequest = [QCloudInitiateMultipartUploadRequest new];// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketinitRequest.bucket = @"examplebucket-1250000000";// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"initRequest.object = @"exampleobject";// 将作为对象的元数据返回initRequest.cacheControl = @"cacheControl";initRequest.contentDisposition = @"contentDisposition";// 定义 Object 的 ACL 属性。有效值:private,public-read-write,public-read;默认值:privateinitRequest.accessControlList = @"public";// 赋予被授权者读的权限。initRequest.grantRead = @"grantRead";// 赋予被授权者全部权限initRequest.grantFullControl = @"grantFullControl";[initRequest setFinishBlock:^(QCloudInitiateMultipartUploadResult* outputObject,                              NSError *error) {    // 获取分块复制的 uploadId,后续的分块复制都需要这个 ID,请保存以备后续使用    self->uploadId = outputObject.uploadId;
}];
[[QCloudCOSXMLService defaultCOSXML] InitiateMultipartUpload:initRequest];

说明更多完整示例,请前往 GitHub 查看。Swift

let initRequest = QCloudInitiateMultipartUploadRequest.init();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketinitRequest.bucket = "examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"initRequest.object = "exampleobject";
initRequest.setFinish { (result, error) in if let result = result { // 获取分块复制的 uploadId,后续的分块复制都需要这个 ID,请保存以备后续使用 self.uploadId = result.uploadId; } else { print(error!); }}QCloudCOSXMLService.defaultCOSXML().initiateMultipartUpload(initRequest);

说明更多完整示例,请前往 GitHub 查看。

复制分块

功能说明

将其他对象复制为一个分块 (Upload Part-Copy)。

示例代码

Objective-C

QCloudUploadPartCopyRequest* request = [[QCloudUploadPartCopyRequest alloc] init];
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketrequest.bucket = @"examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"request.object = @"exampleobject";
// 源文件 URL 路径,可以通过 versionid 子资源指定历史版本request.source = @"sourcebucket-1250000000.cos.ap-guangzhou.myqcloud.com/sourceObject";
// 在初始化分块复制的响应中,会返回一个唯一的描述符(upload ID)request.uploadID = uploadId;
// 标志当前分块的序号request.partNumber = 1;
[request setFinishBlock:^(QCloudCopyObjectResult* result, NSError* error) { QCloudMultipartInfo *part = [QCloudMultipartInfo new];
// 获取所复制分块的 etag part.eTag = result.eTag; part.partNumber = @"1"; // 保存起来用于最后完成复制时使用 self.parts=@[part];}];
[[QCloudCOSXMLService defaultCOSXML]UploadPartCopy:request];

说明更多完整示例,请前往 GitHub 查看。Swift

let req = QCloudUploadPartCopyRequest.init();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketreq.bucket = "examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"req.object = "exampleobject";
// 源文件 URL 路径,可以通过 versionid 子资源指定历史版本req.source = "sourcebucket-1250000000.cos.ap-guangzhou.myqcloud.com/sourceObject";// 在初始化分块复制的响应中,会返回一个唯一的描述符(upload ID)if let uploadId = self.uploadId { req.uploadID = uploadId;}
// 标志当前分块的序号req.partNumber = 1;req.setFinish { (result, error) in if let result = result { let mutipartInfo = QCloudMultipartInfo.init(); // 获取所复制分块的 etag mutipartInfo.eTag = result.eTag; mutipartInfo.partNumber = "1"; // 保存起来用于最后完成复制时使用 self.parts = [mutipartInfo]; } else { print(error!); }}QCloudCOSXMLService.defaultCOSXML().uploadPartCopy(req);

说明更多完整示例,请前往 GitHub 查看。

查询已复制的分块

功能说明

查询特定分块复制操作中的已复制的块(List Parts),该接口与分块上传的查询已上传的分块接口一致。

示例代码

Objective-C

QCloudListMultipartRequest* request = [QCloudListMultipartRequest new];
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"request.object = @"exampleobject";
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketrequest.bucket = @"examplebucket-1250000000";
// 在初始化分块复制的响应中,会返回一个唯一的描述符(upload ID)request.uploadId = uploadId;
[request setFinishBlock:^(QCloudListPartsResult * _Nonnull result, NSError * _Nonnull error) {
// 从 result 中获取已复制分块信息 // 用来表示每一个块的信息 NSArray *parts = result.parts;}];
[[QCloudCOSXMLService defaultCOSXML] ListMultipart:request];

说明更多完整示例,请前往 GitHub 查看。Swift

let req = QCloudListMultipartRequest.init();
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"req.object = "exampleobject";
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketreq.bucket = "examplebucket-1250000000";
// 在初始化分块复制的响应中,会返回一个唯一的描述符(upload ID)if let uploadId = self.uploadId { req.uploadId = uploadId;}req.setFinish { (result, error) in if let result = result { // 所有已完成的分片 let parts = result.parts } else { print(error!); }}
QCloudCOSXMLService.defaultCOSXML().listMultipart(req);

说明更多完整示例,请前往 GitHub 查看。

完成分块复制

功能说明

完成整个文件的分块复制(Complete Multipart Upload),该接口与分块上传的完成分块上传接口一致。

示例代码

Objective-C

QCloudCompleteMultipartUploadRequest *completeRequst = [QCloudCompleteMultipartUploadRequest new];// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"completeRequst.object = @"exampleobject";// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketcompleteRequst.bucket = @"examplebucket-1250000000";// 本次要查询的分块复制的 uploadId,可从初始化分块复制的请求结果 QCloudInitiateMultipartUploadResult 中得到completeRequst.uploadId = uploadId;// 已复制分块的信息QCloudCompleteMultipartUploadInfo *partInfo = [QCloudCompleteMultipartUploadInfo new];NSMutableArray * parts = [self.parts mutableCopy];// 对已复制的块进行排序[parts sortUsingComparator:^NSComparisonResult(QCloudMultipartInfo*  _Nonnull obj1,                                               QCloudMultipartInfo*  _Nonnull obj2) {    int a = obj1.partNumber.intValue;    int b = obj2.partNumber.intValue;
if (a < b) { return NSOrderedAscending; } else { return NSOrderedDescending; }}];partInfo.parts = [parts copy];completeRequst.parts = partInfo;
[completeRequst setFinishBlock:^(QCloudUploadObjectResult * _Nonnull result, NSError * _Nonnull error) { // 从 result 中获取复制结果}];
[[QCloudCOSXMLService defaultCOSXML] CompleteMultipartUpload:completeRequst];

说明更多完整示例,请前往 GitHub 查看。Swift

let  complete = QCloudCompleteMultipartUploadRequest.init();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketcomplete.bucket = "examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"complete.object = "exampleobject";
// 本次要查询的分块复制的 uploadId,可从初始化分块复制的请求结果// QCloudInitiateMultipartUploadResult 中得到complete.uploadId = "exampleUploadId";if let uploadId = self.uploadId { complete.uploadId = uploadId;}
// 已复制分块的信息let completeInfo = QCloudCompleteMultipartUploadInfo.init();if self.parts == nil { print("没有要完成的分块"); return;}if self.parts != nil { completeInfo.parts = self.parts ?? [];}
complete.parts = completeInfo;complete.setFinish { (result, error) in // 从 result 中获取复制结果}QCloudCOSXMLService.defaultCOSXML().completeMultipartUpload(complete);

说明更多完整示例,请前往 GitHub 查看。

终止分块复制

功能说明

终止一个分块复制操作并删除已复制的块(Abort Multipart Upload),该接口与分块上传的终止分块上传接口一致。

示例代码

Objective-C

QCloudAbortMultipfartUploadRequest *abortRequest = [QCloudAbortMultipfartUploadRequest new];// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"abortRequest.object = @"exampleobject";// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketabortRequest.bucket = @"examplebucket-1250000000";// 本次要终止的分块复制的 uploadId// 可从初始化分块复制的请求结果 QCloudInitiateMultipartUploadResult 中得到abortRequest.uploadId = @"exampleUploadId";[abortRequest setFinishBlock:^(id outputObject, NSError *error) {    // 可以从 outputObject 中获取 response 中 etag 或者自定义头部等信息    NSDictionary * result = (NSDictionary *)outputObject;}];[[QCloudCOSXMLService defaultCOSXML]AbortMultipfartUpload:abortRequest];

说明更多完整示例,请前往 GitHub 查看。Swift

let abort = QCloudAbortMultipfartUploadRequest.init();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketabort.bucket = "examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"abort.object = "exampleobject";
// 本次要查询的分块复制的 uploadId,可从初始化分块复制的请求结果// QCloudInitiateMultipartUploadResult 中得到abort.uploadId = self.uploadId!;
abort.finishBlock = {(result,error)in if let result = result { // 可以从 result 中获取服务器返回的 header 信息 } else { print(error!) }}QCloudCOSXMLService.defaultCOSXML().abortMultipfartUpload(abort);

说明更多完整示例,请前往 GitHub 查看。
对象存储官网1折活动,限时活动,即将结束,速速收藏
同尘科技腾讯云授权服务中心。
购买腾讯云产品享受折上折,更有现金返利。同意关联立享优惠

转转请注明出处:https://www.yunxiaoer.com/145653.html

(0)
上一篇 2023年12月9日
下一篇 2023年12月9日
详情页2

相关推荐

  • 腾讯云轻量应用服务器云服务器 CVM 数据迁移至轻量应用服务器云小二

    操作场景 当您因业务需求,需将当前账号下云服务器中的数据迁移至同一账号下的轻量应用服务器时,可参见本文通过云服务器的自定义镜像及共享镜像功能进行迁移操作。说明:如需进行跨账号迁移数据,参见 在线迁移概述。 前提条件 确保待迁移云服务器实例处于正常运行状态。已了解 自定义镜像 及 共享自定义镜像 注意事项及使用限制。 注意事项 目前仅支持迁移云服务器实例的系统…

    2023年12月9日
  • DataWorks这个和API上的获取出来的差异很大?-云小二-阿里云

    DataWorks这个和API上的获取出来的差异很大?和数据地图上差异也很大 以下为热心网友提供的参考意见 DataWorks和API获取出来的差异很大,主要是因为它们的数据来源、数据格式和数据处理方式不同。 数据来源:DataWorks是一个大数据开发平台,可以从多种数据源中获取数据,包括关系型数据库、非关系型数据库、日志文件等。而API通常是从特定的数据…

    2023年12月30日
  • 腾讯云对象存储自定义域名

    简介 本文档提供关于自定义域名的 API 概览以及 SDK 示例代码。 API 操作名 操作描述 PUT Bucket domain 设置自定义域名 设置存储桶的自定义域名信息 GET Bucket domain 查询自定义域名 查询存储桶的自定义域名信息 DELETE Bucket domain 删除自定义域名 删除存储桶的自定义域名配置信息 SDK AP…

    腾讯云 2023年12月9日
  • 阿里云ECS云服务器数据库概述-云淘科技

    数据库(Database,简称DB)指的是以一定方式存储在一起、能够共享、具有尽可能小的冗余度、与应用程序彼此独立的数据集合。简单来说,数据库可视为电子化的文件柜,您可以对文件中的数据运行新增、查询、更新、删除等操作。 常用数据库简介 常用数据库包含以下三种: Oracle Oracle可以支持多种不同的硬件和操作系统平台,从台式机到大型或超级计算机,为各种…

    阿里云服务器 2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云对象存储检索存储桶

    简介 本文档提供关于检索存储桶的 API 概览以及 SDK 示例代码。 API 操作名 操作描述 HEAD Bucket 检索存储桶及其权限 检索存储桶是否存在且是否有权限访问 检索存储桶及其权限 功能说明 HEAD Bucket 请求可以确认该存储桶是否存在,是否有权限访问。有以下几种情况:存储桶存在且有读取权限,返回 HTTP 状态码为200。无存储桶读…

    腾讯云 2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信
本站为广大会员提供阿里云、腾讯云、华为云、百度云等一线大厂的购买,续费优惠,保证底价,买贵退差。