本文介绍如何管理文件。

列举存储空间中所有文件

OSSGetBucketRequest * getBucket = [OSSGetBucketRequest new];
getBucket.bucketName = @"<bucketName>";

// 可选参数,具体含义参考:https://docs.aliyun.com/#/pub/oss/api-reference/bucket&GetBucket
// getBucket.marker = @"";
// getBucket.prefix = @"";
// getBucket.delimiter = @"";

OSSTask * getBucketTask = [client getBucket:getBucket];

[getBucketTask continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        OSSGetBucketResult * result = task.result;
        NSLog(@"get bucket success!");
        for (NSDictionary * objectInfo in result.contents) {
            NSLog(@"list object: %@", objectInfo);
        }
    } else {
        NSLog(@"get bucket failed, error: %@", task.error);
    }
    return nil;
}];

列举操作具体可设置的参数名称和作用如下:

名称 作用
delimiter 用于对Object名字进行分组的字符。所有名字包含指定的前缀且第一次出现delimiter字符之间的object作为一组元素: CommonPrefixes。
marker 设定结果从marker之后按字母排序的第一个开始返回。
maxkeys 限定此次返回object的最大数,如果不设定,默认为100,maxkeys取值不能大于1000。
prefix 限定返回的object key必须以prefix作为前缀。注意使用prefix查询时,返回的key中仍会包含prefix。

检查文件是否存在

SDK提供了同步接口检测某个指定Object是否在OSS上:

NSError * error = nil;
BOOL isExist = [client doesObjectExistInBucket:TEST_BUCKET withObjectKey:@"file1m" withError:&error];
if (!error) {
    if(isExist) {
        NSLog(@"File exists.");
    } else {
        NSLog(@"File not exists.");
    }
} else {
    NSLog(@"Error!");
}

复制Object

OSSCopyObjectRequest * copy = [OSSCopyObjectRequest new];
copy.bucketName = @<bucketName>;
copy.objectKey = @"<objectKey>";
copy.sourceCopyFrom = [NSString stringWithFormat:@"/%@/%@", @"<bucketName>, @"<objectKey_copyFrom>"];

OSSTask * task = [client copyObject:copy];

[task continueWithBlock:^id(OSSTask *task) {
	if (!task.error) {
        // ...
    }
    return nil;s
}];

上述代码实现了CopyObject。

注意
  • 源Object和目标Object必须属于同一个数据中心。
  • 如果拷贝操作的源Object地址和目标Object地址相同,可以修改已有Object的meta信息。
  • 拷贝文件大小不能超过1G,超过1G需使用Multipart Upload操作。

删除Object

下面代码实现了DeleteObject,要求对所在的Bucket有写权限。

OSSDeleteObjectRequest * delete = [OSSDeleteObjectRequest new];
delete.bucketName = @"<bucketName>";
delete.objectKey = @"<objectKey>";

OSSTask * deleteTask = [client deleteObject:delete];

[deleteTask continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        // ...
    }
    return nil;
}];

// [deleteTask waitUntilFinished];

获取文件元信息

以下代码用于获取文件元信息:

OSSHeadObjectRequest * head = [OSSHeadObjectRequest new];
head.bucketName = @"<bucketName>";
head.objectKey = @"<objectKey>";

OSSTask * headTask = [client headObject:head];

[headTask continueWithBlock:^id(OSSTask *task) {
    if (!task.error) {
        OSSHeadObjectResult * headResult = task.result;
        NSLog(@"all response header: %@", headResult.httpResponseHeaderFields);

        // some object properties include the 'x-oss-meta-*'s
        NSLog(@"head object result: %@", headResult.objectMeta);
    } else {
        NSLog(@"head object error: %@", task.error);
    }
    return nil;
}];