我正在使用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);
}
}
因此,如果我传递一个bucketName名称,这是有效的。但是,如果我尝试传递bucketName / folderName“我收到一条错误消息。此代码似乎不喜欢存储桶和文件夹路径组合的组合。
任何想法都赞赏。
答案 0 :(得分:22)
Amazon S3是一个“扁平”文件系统,这意味着它没有物理文件夹。如您所知,“文件夹”只是添加到文件名的前缀。
您需要将prefix
属性设置为您的请求(请参阅documentation)
例如,给定以下文件集:
folderName1 / fileNameA.txt
folderName1 / fileNameB.txt
folderName2 / folderName3 / fileNameC.txt
如果您将prefix
设置为folderName1
,将delimiter
设置为/
,则只能获得前两个条目。
最后但并非最不重要的是,只保留bucketName
的存储桶名称:)
S3 Developer Guide的更多信息。