Я загружаю фотографию из моего приложения iOS в Amazon S3 успешно. Мне нужно получить общедоступный URL для этой фотографии. Вместо того, чтобы создавать URL-адрес вручную, я использую следующий способ сделать это.Получить ссылку на объект AWSS3
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
}
Это хорошо работает, и я получаю правильный общедоступный URL.
https://s3-ap-northeast-1.amazonaws.com/myapp/DAEF70E9-495A-40B4-B853-3B337486185D-4988-00000E22AB8E25A6.jpg
У меня есть две проблемы.
1). Инициализация этого метода AWSS3(configuration: configuration)
теперь устарела.
2). Это при инициализации кода уже происходит внутри метода didFinishLaunchingWithOptions
делегата приложения.
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: CognitoRegionType, identityPoolId: CognitoIdentityPoolId)
let configuration = AWSServiceConfiguration(region: DefaultServiceRegionType, credentialsProvider:credentialsProvider)
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration
Однако, пытаясь вызвать endpoint
свойство из этого возвращает конфигурации ноль.
Так что я хочу сделать это. Я не хочу повторять инициализирующий код в приложении App Delegate и здесь. Поэтому, если есть способ получить ссылку на уже инициализированный объект в App Delegate, я бы с удовольствием узнал.