Swift-列出AWS S3存储桶的对象

时间:2018-09-30 00:29:06

标签: swift amazon-web-services amazon-s3 bucket

我正在尝试将AWS S3上的存储桶中的多个图像下载到我的iOS应用程序中。通过使用已知密钥每次可以下载和上传1张图像,我已经能够建立连接,但是我的目标是能够在不知道密钥的情况下从存储桶中下载多张图像。

我发现,要执行此操作,我需要先获取存储桶中图像密钥的列表,然后在迭代该列表时对每个密钥使用上载/下载功能。这导致我从AWSS3库中找到.listObjects函数。我已经看到了很多关于此的帖子,但是我还没有发现任何人讨论我遇到的问题。当我运行s3.listObjects函数时,会跳过完成块。正如您在下面看到的,我有一条针对错误和成功结果的打印语句,但均未打印。我已经在该块中放置了断点,并验证了该断点没有运行。我还听说有时某些完成块不起作用,所以我还尝试了使用不同完成块的相同代码获得相同结果。

这是我的代码:

// I have imported AWSCognito and AWSS3

let bucketName = "bucket name"
var s3URL: URL!
let s3 = AWSS3.s3(forKey: "default key")

override func viewDidLoad() {
    super.viewDidLoad()
    let credentialsProvider = AWSCognitoCredentialsProvider(regionType:.myRegionType,
                                                            identityPoolId:"myPoolId")

    let configuration = AWSServiceConfiguration(region:.myRegion, credentialsProvider:credentialsProvider)

    AWSServiceManager.default().defaultServiceConfiguration = configuration
    s3URL = AWSS3.default().configuration.endpoint.url
    AWSS3.register(with: configuration!, forKey: "default key")
    listObjects()

}

func listObjects() {
    let listRequest = AWSS3ListObjectsRequest()!
    listRequest.bucket = bucketName

    s3.listObjects(listRequest).continueWith { (task) -> Any? in
        if let error = task.error {
            print("listObjects failed: [\(error)]")
        }

        print("listObjects succeeded")
        return nil
    }

}

为简化我的任务,我使用了具有完全公共访问权限的测试存储区,因此权限不会有任何问题。我的存储桶政策在这里:

{
"Version": "the version",
"Id": "the id",
"Statement": [
    {
        "Sid": "the Sid",
        "Effect": "Allow",
        "Principal": "*",
        "Action": "s3:*",
        "Resource": [
            "arn:aws:s3:::mybucket/*",
            "arn:aws:s3:::mybucket"
        ]
    }
]
}

0 个答案:

没有答案