iOS对象标签

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];

相关文档