获取对AWSS3对象的引用

时间:2016-03-29 18:12:34

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

我正在将我的iOS应用中的照片成功上传到Amazon S3。我需要获取该照片的可公开访问的网址。我没有手动构建URL,而是使用以下方法来做到这一点。

let transferManager = AWSS3TransferManager.defaultS3TransferManager()
transferManager.upload(uploadRequest).continueWithBlock { task in
    if let error = task.error {
        print("Upload failed: \(error.code) - \(error.localizedDescription)")
    }
    if let exception = task.exception {
        print("Upload failed: \(exception)")
    }

    if task.result != nil {
        print("Successfully uploaded!")

        let credentialsProvider = AWSCognitoCredentialsProvider(regionType: CognitoRegionType, identityPoolId: CognitoIdentityPoolId)
        let configuration = AWSServiceConfiguration(region: DefaultServiceRegionType, credentialsProvider:credentialsProvider)
        let aws3 = AWSS3(configuration: configuration)
        let publicURL = aws3.configuration.endpoint.URL.URLByAppendingPathComponent(uploadRequest.bucket!).URLByAppendingPathComponent(uploadRequest.key!)
        print(publicURL)
    }

    return nil
}

这很有效,我得到了公共网址。

https://s3-ap-northeast-1.amazonaws.com/myapp/DAEF70E9-495A-40B4-B853-3B337486185D-4988-00000E22AB8E25A6.jpg

我有两个问题。

1)。以这种方式初始化AWSS3(configuration: configuration)现在已弃用。

2)。初始化代码时,这已经发生在App Delegate的didFinishLaunchingWithOptions方法中。

let credentialsProvider = AWSCognitoCredentialsProvider(regionType: CognitoRegionType, identityPoolId: CognitoIdentityPoolId)
let configuration = AWSServiceConfiguration(region: DefaultServiceRegionType, credentialsProvider:credentialsProvider)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration

但是,尝试从此配置调用endpoint属性将返回nil。

所以我要做的就是这个。我不想在App Delegate和这里重复初始化代码。因此,如果有办法在App Delegate中获取已经初始化的对象的引用,我很想知道。

2 个答案:

答案 0 :(得分:2)

我认为您可以使用以下API:https://docs.aws.amazon.com/AWSiOSSDK/latest/Classes/AWSS3.html#//api/name/registerS3WithConfiguration:forKey

SDK将为您保存对象,并且始终可以使用S3ForKey获取它:这里提到:https://docs.aws.amazon.com/AWSiOSSDK/latest/Classes/AWSS3.html#//api/name/S3ForKey

API参考中有代码片段,用于演示用法。

-Rohan

答案 1 :(得分:0)

我实际上能够使用AWSS3.defaultS3()获取S3对象的实例。所以我可以像这样构建公共URL。

let publicURL = AWSS3.defaultS3().configuration.endpoint.URL.URLByAppendingPathComponent(uploadRequest.bucket!).URLByAppendingPathComponent(uploadRequest.key!)