全部产品
Search
文档中心

对象存储 OSS:iOS列举文件

更新时间:Aug 28, 2024

本文介绍如何列举存储空间下(Bucket)中的所有文件(Object)、指定个数的文件、指定前缀的文件等。

注意事项

  • 使用本文示例前您需要先通过自定义域名、STS等方式新建OSSClient,具体请参见初始化

    说明

    所创建存储空间的所属地域取决于初始化配置的endpoint地域信息。

  • 要列举文件,您必须有ossGetObject权限。具体操作,请参见为RAM用户授权自定义的权限策略

列举指定个数的文件

以下代码用于列举examplebucket中最多20个文件。

OSSGetBucketRequest * getBucket = [OSSGetBucketRequest new];
// 填写Bucket名称,例如examplebucket。
getBucket.bucketName = @"examplebucket";
// 填写返回文件的最大个数。如果不设置此参数,则默认值为100,maxkeys的取值不能大于1000。
getBucket.maxKeys = 20;

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;
}];
// 实现同步阻塞等待任务完成。
// [getBucketTask waitUntilFinished];

列举指定前缀的文件

以下代码用于列举examplebucket中以file为前缀的文件。

OSSGetBucketRequest * getBucket = [OSSGetBucketRequest new];
// 填写Bucket名称,例如examplebucket。
getBucket.bucketName = @"examplebucket";
// 填写前缀。
getBucket.prefix = @"file";

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;
}];
// 实现同步阻塞等待任务完成。
// [getBucketTask waitUntilFinished]

列举指定marker之后的文件

以下代码用于列举examplebucket中exampleobject.txt之后的文件。

OSSGetBucketRequest * getBucket = [OSSGetBucketRequest new];
// 填写Bucket名称,例如examplebucket。
getBucket.bucketName = @"examplebucket";
// 填写marker。从marker之后按字母排序的第一个开始返回文件。
// 如果marker在存储空间中不存在,则会从符合marker字母排序的下一个开始返回文件。
getBucket.marker = @"exampleobject.txt";

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;
}];
// 实现同步阻塞等待任务完成。
// [getBucketTask waitUntilFinished]

分页列举

首先,声明相关的全局变量:

@interface ... {
    NSString *_marker;
    BOOL _isCompleted;
}
@end

以下代码用于在 examplebucket 中分页列举,每页最多显示 20 个文件。

 do {
    OSSGetBucketRequest *getBucket = [OSSGetBucketRequest new];
    getBucket.bucketName = @"examplebucket";
    getBucket.marker = _marker;  // Accessing the _marker instance variable
    getBucket.maxKeys = 20;

    OSSTask *getBucketTask = [client getBucket:getBucket];
    [getBucketTask continueWithBlock:^id(OSSTask *task) {
        if (!task.error) {
            OSSGetBucketResult *result = task.result;
            NSLog(@"Get bucket success!");
            NSLog(@"objects: %@", result.contents);
            if (result.isTruncated) {
                _marker = result.nextMarker;  // Update the _marker instance variable
                _isCompleted = NO;
            } else {
                _isCompleted = YES;
            }
        } else {
            _isCompleted = YES;
            NSLog(@"Get bucket failed, error: %@", task.error);
        }
        return nil;
    }];
    // 实现同步阻塞等待任务完成。
    [getBucketTask waitUntilFinished];
} while (!_isCompleted);

分页列举指定前缀的文件

首先,声明相关的全局变量:

@interface ... {
    NSString *_marker;
    BOOL _isCompleted;
}
@end

以下代码用于在 examplebucket 中分页列举以 file 为前缀的文件,每页最多显示 20 个文件。

do {
    OSSGetBucketRequest *getBucket = [OSSGetBucketRequest new];
    getBucket.bucketName = @"examplebucket";
    getBucket.marker = _marker;  // Accessing the _marker instance variable
    getBucket.maxKeys = 20;
    getBucket.prefix = @"file";

    OSSTask *getBucketTask = [client getBucket:getBucket];
    [getBucketTask continueWithBlock:^id(OSSTask *task) {
        if (!task.error) {
            OSSGetBucketResult *result = task.result;
            NSLog(@"Get bucket success!");
            NSLog(@"objects: %@", result.contents);

            if (result.isTruncated) {
                _marker = result.nextMarker;  // Update the _marker instance variable
                _isCompleted = NO;
            } else {
                _isCompleted = YES;
            }
        } else {
            _isCompleted = YES;
            NSLog(@"Get bucket failed, error: %@", task.error);
        }
        return nil;
    }];
    // 实现同步阻塞等待任务完成。
    [getBucketTask waitUntilFinished];
} while (!_isCompleted);

相关文档