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

说明 关于列举文件的更多信息,请参见 GetBucket (ListObjects)

列举指定个数的文件

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

OSSGetBucketRequest * getBucket = [OSSGetBucketRequest new];
// 填写Bucket名称。
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;
}];

列举指定前缀的文件

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

OSSGetBucketRequest * getBucket = [OSSGetBucketRequest new];
// 填写Bucket名称。
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;
}];

列举指定marker之后的文件

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

OSSGetBucketRequest * getBucket = [OSSGetBucketRequest new];
// 填写Bucket名称。
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;
}];

分页列举所有文件

以下代码用于分页列举examplebucket中的所有文件,每页最多返回20个文件。

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

@implementation ...

// 分页列举所有文件。
- (void)getAllObjects {
    do {
        OSSTask *task = [self getObjectList];
        // 阻塞等待请求完成获取NextMarker,请求下一页时需要将请求的marker设置为上一页请求返回的NextMarker。第一页无需设置。
        // 示例中通过循环分页列举数据,因此需要阻塞等待请求完成获取NextMarker才能请求下一页数据,实际使用时可根据实际场景判断是否需要阻塞。
        [task waitUntilFinished];
    } while (!_isCompleted);
}

// 列举一页。
- (OSSTask *)getObjectList {
    OSSGetBucketRequest * getBucket = [OSSGetBucketRequest new];
    // 填写Bucket名称。
    getBucket.bucketName = @"examplebucket";
    // 填写每页返回文件的最大个数。如果不设置此参数,则默认值为100,maxKeys的取值不能大于1000。
    getBucket.maxKeys = 20;
    // marker为全局属性。
    getBucket.marker = self.marker;

    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);
            }
            if (result.isTruncated) {
                _marker = result.nextMarker;
            } else {
                _isCompleted = YES;
            }
        } else {
            _isCompleted = YES;
            NSLog(@"get bucket failed, error: %@", task.error);
        }
        return nil;
    }];
    return getBucketTask;
}
@end

分页列举指定前缀的文件

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

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

@implementation ...

// 分页列举所有文件。
- (void)getAllObjects {
    do {
        OSSTask *task = [self getObjectList];
        // 阻塞等待请求完成获取NextMarker,请求下一页时需要将请求的marker设置为上一页请求返回的NextMarker。第一页无需设置。
        // 示例中通过循环分页列举数据,因此需要阻塞等待请求完成获取NextMarker才能请求下一页数据,实际使用时可根据实际场景判断是否需要阻塞。
        [task waitUntilFinished];
    } while (!_isCompleted);
}

// 列举一页。
- (OSSTask *)getObjectList {
    OSSGetBucketRequest * getBucket = [OSSGetBucketRequest new];
    // 填写Bucket名称。
    getBucket.bucketName = @"examplebucket";
    // 填写每页返回文件的最大个数。如果不设置此参数,则默认值为100,maxKeys的取值不能大于1000。
    getBucket.maxKeys = 20;
    // 填写前缀。
    getBucket.prefix = @"file";
    // marker为全局属性。
    getBucket.marker = self.marker;

    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);
            }
            if (result.isTruncated) {
                _marker = result.nextMarker;
            } else {
                _isCompleted = YES;
            }
        } else {
            _isCompleted = YES;
            NSLog(@"get bucket failed, error: %@", task.error);
        }
        return nil;
    }];
    return getBucketTask;
}
@end