【问题标题】:AWS S3: List Objects from a specific S3 folder?AWS S3:列出特定 S3 文件夹中的对象?
【发布时间】:2014-07-01 20:57:06
【问题描述】:

我正在使用 AWS IOS 开发工具包从 S3 下载文件,但无法在 S3 存储桶的特定文件夹中列出对象。我可以使用 listObjectsInBucket 方法列出整个存储桶的所有文件,但我只需要列出存储桶中 特定 文件夹中的文件。

所以我尝试使用 listObjects 方法并指定存储桶名称和 前缀(表示 S3 上的文件夹名称)。

但是下面的代码不起作用。

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

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

【问题讨论】:

  • 我找到了问题(或修复,无论如何)。 S3ListObjectsRequest 初始化需要调用方法 initWithName@"S3Name"...
  • 新代码为:S3ListObjectsRequest *lor = [[S3ListObjectsRequest alloc] initWithName:@"bucketName"];
  • 解决了我的问题 +1 。只需在我的代码中添加前缀:P

标签: ios amazon-web-services amazon-s3


【解决方案1】:

只是不要在文件夹名称 1 前面加上“/”,一切都会好起来的。

斯威夫特:

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

目标-C:

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

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

【讨论】:

    【解决方案2】:
    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;
    }];
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-12
      • 1970-01-01
      • 2017-09-13
      • 2016-10-29
      • 1970-01-01
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      相关资源
      最近更新 更多