2016-03-29 4 views
2

Я загружаю фотографию из моего приложения 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, я бы с удовольствием узнал.

ответ

0

я был фактически в состоянии получить экземпляр объекта S3 с AWSS3.defaultS3(). Поэтому я мог бы создать общедоступный URL-адрес.

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