详情页标题前

腾讯云对象存储上传对象

详情页1

简介

文档提供关于对象的高级上传、简单上传、分块上传等操作相关的 API 概览以及 SDK 示例代码。简单操作

API 操作名 操作描述
PUT Object 简单上传对象 上传一个对象至存储桶

分块操作

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

SDK API 参考

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

高级接口(推荐)

上传对象

高级接口封装了简单上传、分块上传接口,根据文件大小智能的选择上传方式,同时支持续传功能。

示例代码一: 上传本地文件

Objective-C

QCloudCOSXMLUploadObjectRequest* put = [QCloudCOSXMLUploadObjectRequest new];/** 本地文件路径,请确保 URL 是以 file:// 开头,格式如下 :1. [NSURL URLWithString:@"file:////var/mobile/Containers/Data/Application/DBPF7490-D5U8-4ABF-A0AF-CC49D6A60AEB/Documents/exampleobject"]2. [NSURL fileURLWithPath:@"/var/mobile/Containers/Data/Application/DBPF7490-D5U8-4ABF-A0AF-CC49D6A60AEB/Documents/exampleobject"]*/NSURL* url = [NSURL fileURLWithPath:@"文件的URL"];// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketput.bucket = @"examplebucket-1250000000";// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"put.object = @"exampleobject";// 需要上传的对象内容。可以传入NSData*或者NSURL*类型的变量put.body =  url;// 监听上传进度[put setSendProcessBlock:^(int64_t bytesSent,                           int64_t totalBytesSent,                           int64_t totalBytesExpectedToSend) {    //      bytesSent                 本次要发送的字节数(一个大文件可能要分多次发送)    //      totalBytesSent            已发送的字节数    //      totalBytesExpectedToSend  本次上传要发送的总字节数(即一个文件大小)}];// 监听上传结果[put setFinishBlock:^(QCloudUploadObjectResult *result, NSError *error) {    // 在上传结果 result.location 中获取上传文件的下载链接    NSString * fileUrl = result.location;    // 获取文件crc64    NSString * crc64 = [[outputObject __originHTTPURLResponse__].allHeaderFields valueForKey:@"x-cos-hash-crc64ecma"];}];[put setInitMultipleUploadFinishBlock:^(QCloudInitiateMultipartUploadResult *                                        multipleUploadInitResult,                                        QCloudCOSXMLUploadObjectResumeData resumeData) {    // 在初始化分块上传完成以后会回调该 block,在这里可以获取 resumeData,uploadid    NSString* uploadId = multipleUploadInitResult.uploadId;}];[[QCloudCOSTransferMangerService defaultCOSTransferManager] UploadObject:put];

说明更多完整示例,请前往 GitHub 查看。上传之后,您可以用同样的 Key 生成文件下载链接,具体使用方法见 生成预签名链接 文档。但注意如果您的文件是私有读权限,那么下载链接只有一定的有效期。Swift

let put:QCloudCOSXMLUploadObjectRequest = QCloudCOSXMLUploadObjectRequest<AnyObject>();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketput.bucket = "examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"put.object = "exampleobject";
// 需要上传的对象内容。可以传入NSData*或者NSURL*类型的变量put.body = NSURL.fileURL(withPath: "Local File Path") as AnyObject;
// 监听上传结果put.setFinish { (result, error) in // 获取上传结果 if let result = result { // 文件的 etag let eTag = result.eTag // 文件下载链接 let location = result.location; // 获取文件crc64 let crc64 = result?.__originHTTPURLResponse__.allHeaderFields["x-cos-hash-crc64ecma"]; } else { print(error!); }}
// 监听上传进度put.sendProcessBlock = { (bytesSent, totalBytesSent, totalBytesExpectedToSend) in // bytesSent 本次要发送的字节数(一个大文件可能要分多次发送) // totalBytesSent 已发送的字节数 // totalBytesExpectedToSend 本次上传要发送的总字节数(即一个文件大小)};// 设置上传参数put.initMultipleUploadFinishBlock = {(multipleUploadInitResult, resumeData) in // 在初始化分块上传完成以后会回调该 block,在这里可以获取 resumeData,以及 uploadId if let multipleUploadInitResult = multipleUploadInitResult { let uploadId = multipleUploadInitResult.uploadId }}
QCloudCOSTransferMangerService.defaultCOSTransferManager().uploadObject(put);

说明更多完整示例,请前往 GitHub 查看。上传之后,您可以用同样的 Key 生成文件下载链接,具体使用方法见 生成预签名链接 文档。但注意如果您的文件是私有读权限,那么下载链接只有一定的有效期。

示例代码二: 上传二进制数据

Objective-C

QCloudCOSXMLUploadObjectRequest* put = [QCloudCOSXMLUploadObjectRequest new];
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketput.bucket = @"examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"put.object = @"exampleobject";
// 需要上传的对象内容。可以传入NSData*或者NSURL*类型的变量put.body = [@"My Example Content" dataUsingEncoding:NSUTF8StringEncoding];
// 监听上传进度[put setSendProcessBlock:^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) { // bytesSent 新增字节数 // totalBytesSent 本次上传的总字节数 // totalBytesExpectedToSend 本地上传的目标字节数}];
// 监听上传结果[put setFinishBlock:^(QCloudUploadObjectResult *result, NSError *error) { // 在上传结果 result.location 中获取上传文件的下载链接 NSString * fileUrl = result.location; // 获取文件crc64 NSString * crc64 = [[outputObject __originHTTPURLResponse__].allHeaderFields valueForKey:@"x-cos-hash-crc64ecma"];}];[[QCloudCOSTransferMangerService defaultCOSTransferManager] UploadObject:put];

说明更多完整示例,请前往 GitHub 查看。上传之后,您可以用同样的 Key 生成文件下载链接,具体使用方法见 生成预签名链接 文档。但注意如果您的文件是私有读权限,那么下载链接只有一定的有效期。Swift

let put:QCloudCOSXMLUploadObjectRequest = QCloudCOSXMLUploadObjectRequest<AnyObject>();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketput.bucket = "examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"put.object = "exampleobject";
// 需要上传的对象内容let dataBody:NSData = "wrwrwrwrwrw".data(using: .utf8)! as NSData;put.body = dataBody;
// 监听上传结果put.setFinish { (result, error) in // 获取上传结果 if let result = result { // 文件的 etag let eTag = result.eTag
// 文件下载链接 let location = result.location;
// 获取文件crc64 let crc64 = result?.__originHTTPURLResponse__.allHeaderFields["x-cos-hash-crc64ecma"]; } else { print(error!); }}
// 监听上传进度put.sendProcessBlock = { (bytesSent, totalBytesSent, totalBytesExpectedToSend) in
// bytesSent 新增字节数 // totalBytesSent 本次上传的总字节数 // totalBytesExpectedToSend 本地上传的目标字节数};
QCloudCOSTransferMangerService.defaultCOSTransferManager().uploadObject(put);

说明更多完整示例,请前往 GitHub 查看。上传之后,您可以用同样的 Key 生成文件下载链接,具体使用方法见 生成预签名链接 文档。但注意如果您的文件是私有读权限,那么下载链接只有一定的有效期。

示例代码三: 上传暂停、继续与取消

Objective-C对于上传任务,可以通过以下方式暂停:

NSError *error;NSData *resmeData = [put cancelByProductingResumeData:&error];

暂停之后,可以通过以下方式续传:

QCloudCOSXMLUploadObjectRequest *resumeRequest = [QCloudCOSXMLUploadObjectRequest requestWithRequestData:resmeData];[[QCloudCOSTransferMangerService defaultCOSTransferManager] UploadObject:resumeRequest];

也通过以下方式取消上传:

//丢弃该上传[put abort:^(id outputObject, NSError *error) {
}];

说明更多完整示例,请前往 GitHub 查看。Swift对于上传任务,可以通过以下方式暂停:

var error : NSError?;var uploadResumeData:Data = put.cancel(byProductingResumeData:&error) as Data;

暂停之后,可以通过以下方式续传:

var resumeRequest = QCloudCOSXMLUploadObjectRequest<AnyObject>.init(request: uploadResumeData);QCloudCOSTransferMangerService.defaultCOSTransferManager().uploadObject(resumeRequest);

也通过以下方式取消上传:

//丢弃该上传put.abort { (outputObject, error) in
}

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

示例代码四: 批量上传

Objective-C

for (int i = 0; i<20; i++) {    QCloudCOSXMLUploadObjectRequest* put = [QCloudCOSXMLUploadObjectRequest new];
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket put.bucket = @"examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4" put.object = [NSString stringWithFormat:@"exampleobject-%d",i];
// 需要上传的对象内容。可以传入NSData*或者NSURL*类型的变量 put.body = [@"My Example Content" dataUsingEncoding:NSUTF8StringEncoding];
// 监听上传进度 [put setSendProcessBlock:^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) { // bytesSent 本次要发送的字节数(一个大文件可能要分多次发送) // totalBytesSent 已发送的字节数 // totalBytesExpectedToSend 本次上传要发送的总字节数(即一个文件大小) }];
// 监听上传结果 [put setFinishBlock:^(QCloudUploadObjectResult *result, NSError *error) { // 在上传结果 result.location 中获取上传文件的下载链接 NSString * fileUrl = result.location;
// 获取文件crc64 NSString * crc64 = [[outputObject __originHTTPURLResponse__].allHeaderFields valueForKey:@"x-cos-hash-crc64ecma"]; }]; [[QCloudCOSTransferMangerService defaultCOSTransferManager] UploadObject:put];}

Swift

for i in 1...10 {    let put:QCloudCOSXMLUploadObjectRequest = QCloudCOSXMLUploadObjectRequest<AnyObject>();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket put.bucket = "examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4" put.object = "exampleobject-".appendingFormat("%d", i);
// 需要上传的对象内容 let dataBody:NSData = "wrwrwrwrwrw".data(using: .utf8)! as NSData; put.body = dataBody;
// 监听上传结果 put.setFinish { (result, error) in // 获取上传结果 if let result = result { // 文件的 etag let eTag = result.eTag
// 文件的下载链接 let location = result.location;
// 获取文件crc64 let crc64 = result?.__originHTTPURLResponse__.allHeaderFields["x-cos-hash-crc64ecma"]; } else { print(error!); } }
// 监听上传进度 put.sendProcessBlock = { (bytesSent, totalBytesSent, totalBytesExpectedToSend) in
// bytesSent 本次要发送的字节数(一个大文件可能要分多次发送) // totalBytesSent 已发送的字节数 // totalBytesExpectedToSend 本次上传要发送的总字节数(即一个文件大小) };
QCloudCOSTransferMangerService.defaultCOSTransferManager().uploadObject(put);}

示例代码五: 自定义简单上传与分块上传的阈值

Objective-C

for (int i = 0; i<20; i++) {    QCloudCOSXMLUploadObjectRequest* put = [QCloudCOSXMLUploadObjectRequest new];
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket put.bucket = @"examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4" put.object = [NSString stringWithFormat:@"exampleobject-%d",i];
// 需要上传的对象内容。可以传入NSData*或者NSURL*类型的变量 put.body = [@"My Example Content" dataUsingEncoding:NSUTF8StringEncoding]; // 自定义简单上传与分块上传的阈值:默认当文件大于1MB时启用分块上传 put.mutilThreshold = 10 *1024*1024; // 监听上传进度 [put setSendProcessBlock:^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) { // bytesSent 本次要发送的字节数(一个大文件可能要分多次发送) // totalBytesSent 已发送的字节数 // totalBytesExpectedToSend 本次上传要发送的总字节数(即一个文件大小) }];
// 监听上传结果 [put setFinishBlock:^(QCloudUploadObjectResult *result, NSError *error) { // 在上传结果 result.location 中获取上传文件的下载链接 NSString * location = result.location; // 获取文件crc64 NSString * crc64 = [[outputObject __originHTTPURLResponse__].allHeaderFields valueForKey:@"x-cos-hash-crc64ecma"]; }]; [[QCloudCOSTransferMangerService defaultCOSTransferManager] UploadObject:put];}

Swift

for i in 1...10 {    let put:QCloudCOSXMLUploadObjectRequest = QCloudCOSXMLUploadObjectRequest<AnyObject>();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket put.bucket = "examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4" put.object = "exampleobject-".appendingFormat("%d", i);
// 需要上传的对象内容 let dataBody:NSData = "wrwrwrwrwrw".data(using: .utf8)! as NSData; put.body = dataBody; // 自定义简单上传与分块上传的阈值:默认当文件大于1MB时启用分块上传 put.mutilThreshold = 10 *1024*1024; // 监听上传结果 put.setFinish { (result, error) in // 获取上传结果 if let result = result { // 文件的 etag let eTag = result.eTag // 文件下载链接 let location = result.location; // 获取文件crc64 let crc64 = result?.__originHTTPURLResponse__.allHeaderFields["x-cos-hash-crc64ecma"]; } else { print(error!); } }
// 监听上传进度 put.sendProcessBlock = { (bytesSent, totalBytesSent, totalBytesExpectedToSend) in
// bytesSent 本次要发送的字节数(一个大文件可能要分多次发送) // totalBytesSent 已发送的字节数 // totalBytesExpectedToSend 本次上传要发送的总字节数(即一个文件大小) };
QCloudCOSTransferMangerService.defaultCOSTransferManager().uploadObject(put);}

示例代码六: 自定义分块大小

Objective-C

for (int i = 0; i<20; i++) {    QCloudCOSXMLUploadObjectRequest* put = [QCloudCOSXMLUploadObjectRequest new];
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket put.bucket = @"examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4" put.object = [NSString stringWithFormat:@"exampleobject-%d",i];
// 需要上传的对象内容。可以传入NSData*或者NSURL*类型的变量 put.body = [@"My Example Content" dataUsingEncoding:NSUTF8StringEncoding]; // 自定义分片大小,默认为1MB put.sliceSize = 10 *1024*1024; // 监听上传进度 [put setSendProcessBlock:^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) { // bytesSent 本次要发送的字节数(一个大文件可能要分多次发送) // totalBytesSent 已发送的字节数 // totalBytesExpectedToSend 本次上传要发送的总字节数(即一个文件大小) }];
// 监听上传结果 [put setFinishBlock:^(QCloudUploadObjectResult *result, NSError *error) { // 在上传结果 result.location 中获取上传文件的下载链接 NSString * location = result.location; // 获取文件crc64 NSString * crc64 = [[outputObject __originHTTPURLResponse__].allHeaderFields valueForKey:@"x-cos-hash-crc64ecma"]; }]; [[QCloudCOSTransferMangerService defaultCOSTransferManager] UploadObject:put];}

Swift

for i in 1...10 {    let put:QCloudCOSXMLUploadObjectRequest = QCloudCOSXMLUploadObjectRequest<AnyObject>();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket put.bucket = "examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4" put.object = "exampleobject-".appendingFormat("%d", i);
// 需要上传的对象内容 let dataBody:NSData = "wrwrwrwrwrw".data(using: .utf8)! as NSData; put.body = dataBody; // 自定义分片大小,默认为1MB put.sliceSize = 10 *1024*1024 // 监听上传结果 put.setFinish { (result, error) in // 获取上传结果 if let result = result { // 文件的 etag let eTag = result.eTag
// 文件下载链接 let location = result.location;
// 获取文件crc64 let crc64 = result?.__originHTTPURLResponse__.allHeaderFields["x-cos-hash-crc64ecma"]; } else { print(error!); } }
// 监听上传进度 put.sendProcessBlock = { (bytesSent, totalBytesSent, totalBytesExpectedToSend) in // bytesSent 本次要发送的字节数(一个大文件可能要分多次发送) // totalBytesSent 已发送的字节数 // totalBytesExpectedToSend 本次上传要发送的总字节数(即一个文件大小) };
QCloudCOSTransferMangerService.defaultCOSTransferManager().uploadObject(put);}

示例代码七: 上传时限速

注意 需要 COS iOS SDK v5.8.0 及以上版本。Objective-C

    QCloudCOSXMLUploadObjectRequest* put = [QCloudCOSXMLUploadObjectRequest new];
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket put.bucket = @"examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4" put.object = [NSString stringWithFormat:@"exampleobject-%d",i];
// 需要上传的对象内容。可以传入NSData*或者NSURL*类型的变量 put.body = [@"My Example Content" dataUsingEncoding:NSUTF8StringEncoding];
// 使用trafficLimit参数设置上传限速,单位为bit/s,限速值设置范围为819200 - 838860800,即800Kb/s - 800Mb/s。 put.trafficLimit = 819200; // 监听上传进度 [put setSendProcessBlock:^(int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend) { // bytesSent 本次要发送的字节数(一个大文件可能要分多次发送) // totalBytesSent 已发送的字节数 // totalBytesExpectedToSend 本次上传要发送的总字节数(即一个文件大小) }];
// 监听上传结果 [put setFinishBlock:^(QCloudUploadObjectResult *result, NSError *error) { // 在上传结果 result.location 中获取上传文件的下载链接 NSString * location = result.location; // 获取文件crc64 NSString * crc64 = [[outputObject __originHTTPURLResponse__].allHeaderFields valueForKey:@"x-cos-hash-crc64ecma"]; }]; [[QCloudCOSTransferMangerService defaultCOSTransferManager] UploadObject:put];

Swift


let put:QCloudCOSXMLUploadObjectRequest = QCloudCOSXMLUploadObjectRequest<AnyObject>();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucket put.bucket = "examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4" put.object = "exampleobject-".appendingFormat("%d", i);
// 需要上传的对象内容 let dataBody:NSData = "wrwrwrwrwrw".data(using: .utf8)! as NSData; put.body = dataBody; // 使用trafficLimit参数设置上传限速,单位为bit/s,限速值设置范围为819200 - 838860800,即800Kb/s - 800Mb/s。 put.trafficLimit = 819200; // 监听上传结果 put.setFinish { (result, error) in // 获取上传结果 if let result = result { // 文件的 etag let eTag = result.eTag
// 文件下载链接 let location = result.location; // 获取文件crc64 let crc64 = result?.__originHTTPURLResponse__.allHeaderFields["x-cos-hash-crc64ecma"]; } else { print(error!); } }
// 监听上传进度 put.sendProcessBlock = { (bytesSent, totalBytesSent, totalBytesExpectedToSend) in // bytesSent 本次要发送的字节数(一个大文件可能要分多次发送) // totalBytesSent 已发送的字节数 // totalBytesExpectedToSend 本次上传要发送的总字节数(即一个文件大小) };
QCloudCOSTransferMangerService.defaultCOSTransferManager().uploadObject(put);

示例代码八: 创建目录

Objective-C

QCloudCOSXMLUploadObjectRequest* put = [QCloudCOSXMLUploadObjectRequest new];// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketput.bucket = @"examplebucket-1250000000";// 要创建的目录的名称put.object = @"dir1";
// 需要上传的对象内容,如需创建目录使用空串生成NSData即可put.body = [@"" dataUsingEncoding:NSUTF8StringEncoding];
// 监听上传结果[put setFinishBlock:^(QCloudUploadObjectResult *result, NSError *error) { // 在上传结果 result.location 中获取上传文件的下载链接 NSString * location = result.location;}];[[QCloudCOSTransferMangerService defaultCOSTransferManager] UploadObject:put];

说明更多完整示例,请前往 GitHub 查看。上传之后,您可以用同样的 Key 生成文件下载链接,具体使用方法见 生成预签名链接 文档。但注意如果您的文件是私有读权限,那么下载链接只有一定的有效期。Swift

let put:QCloudCOSXMLUploadObjectRequest = QCloudCOSXMLUploadObjectRequest<AnyObject>();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketput.bucket = "examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"put.object = "dir/";
// 需要上传的对象内容let dataBody:NSData = "".data(using: .utf8)! as NSData;put.body = dataBody;
// 监听上传结果put.setFinish { (result, error) in // 获取上传结果 if let result = result { // 文件下载链接 let location = result.location;
} else { print(error!); } }QCloudCOSTransferMangerService.defaultCOSTransferManager().uploadObject(put);

说明更多完整示例,请前往 GitHub 查看。上传之后,您可以用同样的 Key 生成文件下载链接,具体使用方法见 生成预签名链接 文档。但注意如果您的文件是私有读权限,那么下载链接只有一定的有效期。

简单操作

简单上传对象

功能说明

PUT Object 接口可以上传一个对象至指定存储桶中,该操作需要请求者对存储桶有 WRITE 权限。最大支持上传不超过5GB的对象,5GB以上对象请使用 分块上传高级接口 上传。注意 Key(文件名)不能以/结尾,否则会被识别为文件夹。

示例代码

Objective-C

QCloudPutObjectRequest* put = [QCloudPutObjectRequest new];
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketput.bucket = @"examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"put.object = @"exampleobject";
// 文件内容,可以传入NSData*或者NSURL*类型的变量put.body = [@"testFileContent" dataUsingEncoding:NSUTF8StringEncoding];
[put setFinishBlock:^(id result, NSError *error) { // result 包含响应的 header 信息 // 获取文件crc64 NSString * crc64 = [[outputObject __originHTTPURLResponse__].allHeaderFields valueForKey:@"x-cos-hash-crc64ecma"];}];
[[QCloudCOSXMLService defaultCOSXML] PutObject:put];

说明更多完整示例,请前往 GitHub 查看。上传之后,您可以用同样的 Key 生成文件下载链接,具体使用方法见 生成预签名链接 文档。但注意如果您的文件是私有读权限,那么下载链接只有一定的有效期。Swift

let putObject = QCloudPutObjectRequest<AnyObject>.init();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketputObject.bucket = "examplebucket-1250000000";// 需要上传的对象内容。可以传入NSData*或者NSURL*类型的变量let dataBody:NSData? = "wrwrwrwrwrw".data(using: .utf8) as NSData?;putObject.body = dataBody!;
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"putObject.object = "exampleobject";putObject.finishBlock = {(result,error) in if let result = result { // 获取文件crc64 let crc64 = result?.__originHTTPURLResponse__.allHeaderFields["x-cos-hash-crc64ecma"]; } else { print(error!); }}QCloudCOSXMLService.defaultCOSXML().putObject(putObject);

说明更多完整示例,请前往 GitHub 查看。上传之后,您可以用同样的 Key 生成文件下载链接,具体使用方法见 生成预签名链接 文档。但注意如果您的文件是私有读权限,那么下载链接只有一定的有效期。

分块操作

关于分块上传的更多说明请参见 分块上传。分块上传对象的操作流程如下。

分块上传的流程

1. 初始化分块上传(Initiate Multipart Upload),得到 UploadId2. 使用 UploadId 上传分块(Upload Part)3. 完成分块上传(Complete Multipart Upload)

分块继续上传的流程

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

终止分块上传的流程

1. 如果没有记录 UploadId,查询分块上传任务(List Multipart Uploads),得到对应文件的 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)。

示例代码

Objective-C

QCloudUploadPartRequest* request = [QCloudUploadPartRequest new];// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketrequest.bucket = @"examplebucket-1250000000";// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"request.object = @"exampleobject";// 块编号request.partNumber = 1;// 标识本次分块上传的 ID;使用 Initiate Multipart Upload 接口初始化分块上传时会得到一个 uploadIdrequest.uploadId = uploadId;// 上传的数据:支持 NSData*,NSURL(本地 URL) 和 QCloudFileOffsetBody * 三种类型request.body = [@"testFileContent" dataUsingEncoding:NSUTF8StringEncoding];[request setSendProcessBlock:^(int64_t bytesSent,                               int64_t totalBytesSent,                               int64_t totalBytesExpectedToSend) {    // 上传进度信息    // bytesSent                   新增字节数    // totalBytesSent              本次上传的总字节数    // totalBytesExpectedToSend    本地上传的目标字节数}];[request setFinishBlock:^(QCloudUploadPartResult* outputObject, NSError *error) {    QCloudMultipartInfo *part = [QCloudMultipartInfo new];    // 获取所上传分块的 etag    part.eTag = outputObject.eTag;    part.partNumber = @"1";    // 保存起来用于最好完成上传时使用    self.parts = @[part];    // 获取文件crc64    NSString * crc64 = [[outputObject __originHTTPURLResponse__].allHeaderFields valueForKey:@"x-cos-hash-crc64ecma"];
}];
[[QCloudCOSXMLService defaultCOSXML] UploadPart:request];

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

let uploadPart = QCloudUploadPartRequest<AnyObject>.init();
// 存储桶名称,由BucketName-Appid 组成,可以在COS控制台查看 https://console.cloud.tencent.com/cos5/bucketuploadPart.bucket = "examplebucket-1250000000";
// 对象键,是对象在 COS 上的完整路径,如果带目录的话,格式为 "video/xxx/movie.mp4"uploadPart.object = "exampleobject";uploadPart.partNumber = 1;
// 标识本次分块上传的 IDif let uploadId = self.uploadId { uploadPart.uploadId = uploadId;}
// 示例文件内容let dataBody:NSData? = "wrwrwrwrwrwwrwrwrwrwrwwwrwrw" .data(using: .utf8) as NSData?;
uploadPart.body = dataBody!;uploadPart.setFinish { (result, error) in if let result = result { let mutipartInfo = QCloudMultipartInfo.init(); // 获取分块的 etag mutipartInfo.eTag = result.eTag; mutipartInfo.partNumber = "1"; // 保存起来用于最后完成上传时使用 self.parts = [mutipartInfo]; // 获取文件crc64 let crc64 = result?.__originHTTPURLResponse__.allHeaderFields["x-cos-hash-crc64ecma"]; } else { print(error!); }}uploadPart.sendProcessBlock = {(bytesSent,totalBytesSent, totalBytesExpectedToSend) in // 上传进度信息 // bytesSent 新增字节数 // totalBytesSent 本次上传的总字节数 // totalBytesExpectedToSend 本地上传的目标字节数
}QCloudCOSXMLService.defaultCOSXML().uploadPart(uploadPart);

说明更多完整示例,请前往 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 中获取上传结果 // 获取文件crc64 NSString * crc64 = [[outputObject __originHTTPURLResponse__].allHeaderFields valueForKey:@"x-cos-hash-crc64ecma"];}];
[[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 if let result = result { // 文件的 eTag let eTag = result.eTag // 不带签名的文件链接 let location = result.location
// 获取文件crc64 let crc64 = result?.__originHTTPURLResponse__.allHeaderFields["x-cos-hash-crc64ecma"]; } else { print(error!); }}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/145650.html

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

相关推荐

  • 腾讯云容器镜像服务跨实例(账号)同步镜像同尘

    操作场景 腾讯云容器镜像服务(Tencent Container Registry,TCR)支持在不同地域的不同实例间同步容器镜像及 Helm Chart,可实现单点推送及全球自动同步分发,方便企业在全球多个地域快速部署更新容器业务。实例同步功能允许用户自定义创建同步规则,可指定某个实例内的部分资源同步至另一个实例内的指定位置。例如,用户可选择同步资源类型(…

    2023年12月9日
  • 腾讯云对象存储媒体截图接口

    简介 本文档提供关于媒体截图接口的 API 概览和 SDK 示例代码。注意COS Javascript SDK 版本需要大于等于 v1.3.1。 API 操作名 操作描述 GetSnapshot 查询截图 用于查询媒体文件在某个时间的截图 查询截图 功能说明 用于查询媒体文件在某个时间的截图。注意 使用此接口前,请确保已打开官网控制台中数据处理下的媒体处理开…

    腾讯云 2023年12月9日
  • 钉钉宜搭自动获取申请人的手机号-云小二-阿里云

    钉钉宜搭能不能像申请部门一样自动获取申请人的手机号,或者调用通讯录API来获取,但是具体操作步骤我试了下没有头绪,有没有大神指点一下 以下为热心网友提供的参考意见 可以使用宜搭连接器调用钉钉开放平台接口,查询客户详情接口,文档链接:https://open.dingtalk.com/document/isvapp/query-user-details通过连接…

    2023年12月20日
  • 腾讯云内容分发网络CDN通过 CDN 控制台实现 CDN 加速 COS

    本文详细描述了通过 CDN 加速 COS 的整体操作流程和具体的操作方法。 前提条件 1. 完成腾讯云账号注册、实名认证。2. 创建 COS 存储桶,详情请参见 创建存储桶。 操作指南 添加域名 登录 CDN 控制台,在左侧导航栏中,单击域名管理进入域名管理页面,单击添加域名。  选择 COS 作为源站 第一部分:域名配置 在域名处填充您需要加速的区域,…

    2023年12月9日
  • 信息流广告,信息流部分建议宽度830px,只针对默认列表样式,顺序随机
  • 腾讯云CVM服务器实例内存未耗尽时触发 Out Of Memory

    现象描述 Linux 云服务器在内存使用率未占满的情况下触发了 OOM(Out Of Memory)。如下图所示:  可能原因 可能原因 处理措施 内存使用率过高 检查内存使用率是否过高 进程数超限 检查进程数是否超限 系统可用内存低于 min_free_kbytes 值 检查系统可用内存是否低于 min_free_kbytes 值 故障处理 检查内存使…

    2023年12月9日

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

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

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