Amazon AWS IOS SDK:如何列出文件夹中的所有文件名

Jer*_*emy 13 amazon-s3 ios

我正在使用AWS IOS SDK并尝试列出文件夹中的所有文件.

此代码用于列出BUCKET中的所有文件等:

-(void) s3DirectoryListing: (NSString *) bucketName {

    s3Client = [[AmazonS3Client alloc] initWithAccessKey:ACCESS_KEY withSecretKey:SECRET_KEY];

    @try {

        S3ListObjectsRequest *req = [[S3ListObjectsRequest alloc] initWithName:bucketName];

        S3ListObjectsResponse *resp = [s3Client listObjects:req];

        NSMutableArray* objectSummaries = resp.listObjectsResult.objectSummaries;  

        for (int x = 0; x < [objectSummaries count]; x++) {
            NSLog(@"objectSummaries: %@",[objectSummaries objectAtIndex:x]);
        }
    }
    @catch (NSException *exception) {
    NSLog(@"Cannot list S3 %@",exception);
}

}
Run Code Online (Sandbox Code Playgroud)

因此,如果我传递一个bucketName名称,这是有效的.但是,如果我尝试传递bucketName/folderName"我收到一条错误消息.此代码似乎不喜欢存储桶和文件夹路径组合的组合.

任何想法都赞赏.

Vic*_*ari 22

Amazon S3是一个"扁平"文件系统,这意味着它没有物理文件夹.如您所知,"文件夹"只是添加到文件名的前缀.

您需要将prefix属性设置为您的请求(请参阅文档)

例如,给定以下文件集:

folderName1/fileNameA.txt
folderName1/fileNameB.txt
folderName2/folderName3/fileNameC.txt

如果设置prefixfolderName1和你delimiter/,你应该只有前两个条目.

最后,但并非最不重要的是,留下你bucketName唯一的桶名:)

有关S3开发人员指南的更多信息.

  • 实际上,要使其工作,您必须将前缀设置为"folderName1 /".在阅读文档之前我不是那么明显,前缀必须包含分隔符才能工作...... (6认同)