我正在将我的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中获取已经初始化的对象的引用,我很想知道。
答案 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!)