本文介绍如何列举存储空间下(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