全部產品
Search
文件中心

Object Storage Service: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);

相關文檔