本文介紹如何列舉儲存空間下(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);
相關文檔
關於列舉檔案的API介面說明,請參見GetBucket (ListObjects)。
關於初始化OSSClient,請參見如何初始化OSSClient執行個體。