OSS支持使用标签对存储空间(Bucket)中的文件(Object)进行分类。本文介绍如何设置、获取以及删除Object标签。
注意事项
使用本文示例前您需要先通过自定义域名、STS等方式新建OSSClient,具体请参见初始化。
设置对象标签
上传Object时设置对象标签
以下代码用于上传Object时设置对象标签。
OSSPutObjectRequest * put = [OSSPutObjectRequest new];
// 填写Bucket名称,例如examplebucket。
put.bucketName = @"examplebucket";
// 填写文件完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
put.objectKey = @"exampledir/exampleobject.txt";
put.uploadingFileURL = [NSURL fileURLWithPath:@"<filePath>"];
// 设置对象标签信息,例如标签的key为owner,value为John。
NSDictionary *tagging = @{@"owner": @"John"};
put.objectMeta = @{@"x-oss-tagging": [OSSUtil populateQueryStringFromParameter:tagging]};
// (可选)设置上传进度。
put.uploadProgress = ^(int64_t bytesSent, int64_t totalByteSent, int64_t totalBytesExpectedToSend) {
// 指定当前上传长度、当前已经上传总长度、待上传的总长度。
NSLog(@"%lld, %lld, %lld", bytesSent, totalByteSent, totalBytesExpectedToSend);
};
OSSTask * putTask = [client putObject:put];
[putTask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"upload object success!");
} else {
NSLog(@"upload object failed, error: %@" , task.error);
}
return nil;
}];
// [putTask waitUntilFinished];
// [put cancel];
为已上传Object添加或更改对象标签
以下代码用于为已上传Object添加或更改对象标签。
OSSPutObjectTaggingRequest *putTaggingRequest = [OSSPutObjectTaggingRequest new];
// 填写Bucket名称,例如examplebucket。
putTaggingRequest.bucketName = @"examplebucket";
// 填写Object完整路径,例如exampledir/exampleobject.txt。Object完整路径中不能包含Bucket名称。
putTaggingRequest.objectKey = @"exampledir/exampleobject.txt";
// 设置标签信息。
NSDictionary *tags = @{@"key1":@"value1", @"key2":@"value2"};
putTaggingRequest.tags = tags;
OSSTask * putTask= [client putObjectTagging:putTaggingRequest];
[putTask continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) {
if (task.error) {
NSLog(@"error: %@", task.error);
} else {
NSLog(@"put tagging success");
}
return nil;
}];
// [putTask waitUntilFinished];
拷贝Object时设置对象标签
以下代码用于拷贝Object时设置对象标签。
OSSCopyObjectRequest * copy = [OSSCopyObjectRequest new];
// 填写源Bucket名称。
copy.sourceBucketName = @"sourceBucketName";
// 填写源objectKey。
copy.sourceObjectKey = @"sourceObjectKey";
// 填写目标Bucket名称。
copy.bucketName = @"bucketName";
// 填写目标objectKey。
copy.objectKey = @"objectKey";
// 设置对象标签信息。
NSDictionary *tagging = @{@"owner": @"John"};
copy.objectMeta = @{
@"x-oss-tagging": [OSSUtil populateQueryStringFromParameter:tagging],
@"x-oss-tagging-directive": @"Replace"
};
OSSTask * task = [client copyObject:copy];
[task continueWithBlock:^id(OSSTask *task) {
if (task.error) {
NSLog(@"error: %@", task.error);
} else {
NSLog(@"copy object success");
}
return nil;
}];
// [task waitUntilFinished];
为软链接文件设置对象标签
以下代码用于为软链接文件设置对象标签。
OSSPutSymlinkRequest * putSymlinkRequest = [OSSPutSymlinkRequest new];
// 填写Bucket名称。
putSymlinkRequest.bucketName = @"examplebucket";
// 填写软链接名称。
putSymlinkRequest.objectKey = @"examplesymlink";
// 填写软链接指定的Object完整路径。Object完整路径中不能包含Bucket名称。
putSymlinkRequest.targetObjectName = @"exampleobject.txt";
// 设置对象标签信息。
NSDictionary *tagging = @{@"owner": @"John"};
putSymlinkRequest.objectMeta = @{
@"x-oss-tagging": [OSSUtil populateQueryStringFromParameter:tagging],
};
OSSTask * putSymlinktask = [client putSymlink:putSymlinkRequest];
[putSymlinktask continueWithBlock:^id(OSSTask *task) {
if (!task.error) {
NSLog(@"put symlink success");
} else {
NSLog(@"put symlink failed, error: %@", task.error);
}
return nil;
}];
// [putSymlinktask waitUntilFinished];
获取Object标签信息
以下代码用于获取Object的标签信息。
OSSGetObjectTaggingRequest *getTaggingRequest = [OSSGetObjectTaggingRequest new];
// 填写Bucket名称。
getTaggingRequest.bucketName = @"examplebucket";
// 填写Object名称。
getTaggingRequest.objectKey = @"exampledir/exampleobject.txt";
OSSTask * getTask = [client getObjectTagging:getTaggingRequest];
// 获取Object的标签信息。
[getTask continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) {
if (!task.error) {
OSSGetObjectTaggingResult *result = task.result;
for (NSString *key in [result.tags allKeys]) {
NSLog(@"tagging %@: %@", key, result.tags[key]);
}
} else {
NSLog(@"get object tagging fail! error: %@", task.error);
}
return nil;
}];
// [getTask waitUntilFinished];
删除Object标签信息
以下代码用于删除Object的标签信息。
OSSDeleteObjectTaggingRequest *deleteTaggingRequest = [OSSDeleteObjectTaggingRequest new];
// 填写Bucket名称。
deleteTaggingRequest.bucketName = @"examplebucket";
// 填写Object名称。
deleteTaggingRequest.objectKey = @"exampledir/exampleobject.txt";
OSSTask *deleteTask = [client deleteObjectTagging:deleteTaggingRequest];
// 删除Object的标签信息。
[deleteTask continueWithBlock:^id _Nullable(OSSTask * _Nonnull task) {
if (!task.error) {
NSLog(@"delete object tagging success");
} else {
NSLog(@"delete object tagging fail! error: %@", task.error);
}
return nil;
}];
// [deleteTask waitUntilFinished];
相关文档
关于设置Object标签的API接口说明,请参见PutObjectTagging。
关于获取Object标签的API接口说明,请参见GetObjectTagging。
关于删除Object标签的API接口说明,请参见DeleteObjectTagging。