AWS S3:列出特定S3文件夹中的对象?

6
我正在使用AWS IOS SDK从S3下载文件,但我遇到了在特定文件夹中列出对象的困难。我可以使用listObjectsInBucket方法列出整个存储桶中的所有文件,但我需要仅列出存储桶中某个特定文件夹内的文件。
因此,我尝试使用listObjects方法并指定存储桶名称和前缀(表示S3上的文件夹名称)。
但是以下代码无法正常工作。
S3ListObjectsRequest *lor = [S3ListObjectsRequest alloc];
lor.bucket = @"bucketName";
lor.prefix = @"/folderName1/foldername2";

S3ListObjectsResponse *ListObjectResponse = [self.s3 listObjects:lor];

我找到了问题(或解决方法)。S3ListObjectsRequest的初始化需要调用initWithName@"S3Name"方法。 - user3634654
新代码如下:S3ListObjectsRequest *lor = [[S3ListObjectsRequest alloc] initWithName:@"bucketName"]; - user3634654
解决了我的问题 +1。只是在我的代码中添加了前缀:P - Shahzaib Maqbool
2个回答

2

只需简单地不在folderName1前面加上“/”,就可以解决问题。

Swift:

let listObjectsRequest = AWSS3ListObjectsRequest()
    listObjectsRequest.bucket = "(your bucket name)"
    listObjectsRequest.prefix = "(subfolder1)/(subfolder2)" 
    s3.listObjects(listObjectsRequest).continueWithBlock { (task) -> AnyObject! in .......

Objective-C:

S3ListObjectsRequest *lor = [S3ListObjectsRequest alloc];
lor.bucket = @"bucketName";
lor.prefix = @"folderName1/foldername2"; 

S3ListObjectsResponse *ListObjectResponse = [self.s3 listObjects:lor];

0
AWSS3ListObjectsRequest *listObjectsRequest = [AWSS3ListObjectsRequest new];
    listObjectsRequest.bucket = @"YourBucketName";

[[s3 listObjects:listObjectsRequest] continueWithBlock:^id(AWSTask *task)
 {
    if (task.error)
    {
        [MBProgressHUD hideAllHUDsForView:self.view animated:YES];
        NSLog(@"listObjects failed: [%@]", task.error);
    }
    else
    {
        AWSS3ListObjectsOutput *listObjectsOutput = task.result;

        for (AWSS3Object *s3Object in listObjectsOutput.contents)
        {
            downloadingFilePath = [[NSTemporaryDirectory() stringByAppendingPathComponent:@"download"] stringByAppendingPathComponent:s3Object.key];

            NSURL *downloadingFileURL = [NSURL fileURLWithPath:downloadingFilePath];

            AWSS3TransferManagerDownloadRequest *downloadRequest = [AWSS3TransferManagerDownloadRequest new];
            downloadRequest.bucket = @"YourBucketName";
            downloadRequest.key = s3Object.key;
            downloadRequest.downloadingFileURL = downloadingFileURL;

            AWSS3TransferManager *transferManager = [AWSS3TransferManager defaultS3TransferManager];
            [[transferManager download:downloadRequest] continueWithBlock:^id(AWSTask *task)
             {
                 if ([task.error.domain isEqualToString:AWSS3TransferManagerErrorDomain]
                     && task.error.code == AWSS3TransferManagerErrorPaused)
                 {
                     NSLog(@"Download paused.");
                 }
                 else if (task.error)
                 {
                     NSLog(@"Upload failed: [%@]", task.error);
                 }
                 else
                 {
                     dispatch_async(dispatch_get_main_queue(), ^
                                    {
                                        //_imgNew.image = [ UIImage imageNamed:[NSString stringWithFormat:@"%@",downloadRequest.downloadingFileURL]];
                                    });
                 }
                 return nil;
             }];
        }

        dispatch_async(dispatch_get_main_queue(), ^{
            [self setUpScrollViews];
            NSLog(@"Set images called");
            [MBProgressHUD hideAllHUDsForView:self.view animated:YES];
        });
    }
    return nil;
}];

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接