首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从亚马逊S3下载所有图片

从亚马逊S3下载所有图片
EN

Stack Overflow用户
提问于 2015-01-10 03:03:03
回答 3查看 2.1K关注 0票数 0

到目前为止,我已经非常幸运地学习并实现了将图片上传到亚马逊的S3服务。我要把照片上传到服务器上。都具有不同的名称,因此不会覆盖另一个名称。

我可以下载一个镜像,但只能使用一个特定的名称(即“image.png”)。我想下载所有的镜像。然后我会将它们放在一个tableView中。我只是在文档中找不到这个问题的答案。这是我的代码,可以下载一个镜像。

代码语言:javascript
复制
-(void)download{

    //Creating S3 transfer manager client
    AWSS3TransferManager *transferManager = [AWSS3TransferManager defaultS3TransferManager];


    //Dowloading actual object
    //Create the NSURL for thte download location.

    NSString *downloadingFilePath = [NSTemporaryDirectory()stringByAppendingPathComponent:@"downloaded-image.png"];
    NSURL *downloadingFileURL = [NSURL fileURLWithPath:downloadingFilePath];

    //Construct download request
    AWSS3TransferManagerDownloadRequest *downloadRequest = [AWSS3TransferManagerDownloadRequest new];

    downloadRequest.bucket = @"MyBucketName";
    downloadRequest.key = @"image.png";  //<----- I can only download an image by this name?
    downloadRequest.downloadingFileURL = downloadingFileURL;


    //Download the file
    [[transferManager download:downloadRequest]continueWithExecutor:[BFExecutor mainThreadExecutor] withBlock:^id(BFTask *task) {
        if (task.error) {
            if ([task.error.domain isEqualToString:AWSS3TransferManagerErrorDomain]) {
                switch (task.error.code) {
                    case AWSS3TransferManagerErrorCancelled:
                    case AWSS3TransferManagerErrorPaused:

                        break;

                    default:
                        NSLog(@"Error: %@", task.error);
                        break;
                }
            }else{
                //Unknown Error
                NSLog(@"Error: %@", task.error);
            }
        }
        if (task.result) {
            AWSS3TransferManagerDownloadOutput *downloadOutput = task.result;
            //File downloade successfully
            NSLog(@"Download Output: %@", downloadOutput);
        }
        self.selectedImageView.image = [UIImage imageWithContentsOfFile:downloadingFilePath];
        return nil;
    }];

}
EN

回答 3

Stack Overflow用户

发布于 2015-01-10 03:45:32

AWSS3有一个名为- listObjects:的方法,它返回AWSS3ListObjectsOutput的一个实例。AWSS3ListObjectsOutputcontents属性是一个AWSS3Object数组。您可以遍历数组并在AWSS3Object的每个key上调用- download:,以便下载存储桶中的所有对象。

票数 1
EN

Stack Overflow用户

发布于 2015-01-11 09:17:01

如果您想采用惰性方法,AWS Command-Line Interface (CLI)可以在一个命令中复制多个文件,甚至是递归子目录。

还有aws s3 sync命令,它只能复制新的或修改过的文件,包括子目录。

因此,您可能希望调用CLI来下载图片,然后使用您自己的代码处理它们。

票数 0
EN

Stack Overflow用户

发布于 2015-10-07 05:27:08

您可以使用AWSS3ListObjectsRequest从Bucket下载所有图片。下面是代码。

AWSS3ListObjectsRequest *listObjectsRequest = AWSS3ListObjectsRequest新建;listObjectsRequest.bucket = @"YourBucketName";

代码语言:javascript
复制
[[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;
}];
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27867419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档