2015-08-27 3 views
2

Я пытаюсь сделать изображение в UIImageView с помощью Swift. Исходный объект находится в ведро AWS S3. Я не смог найти код примера в Google. Поэтому я попытался перевести код, приведенный в этой ссылке [AWS S3 SDK v2 for iOS - Download an image file to UIImage от Obj-C до Swift, но не удалось. Я новичок в iOS.Показать UIImageView с помощью Swift из AWS

 let accessKey = "ACCESS_CODE"; 
     let secretKey = "SECRET_KEY"; 
     // let credentialsProvider = AWSStaticCredentialsProvider.credentialsWithAccessKey(accessKey, secretKey: secretKey) 
     //^Xcode says - credentialsWithAccessKey is deprecated, use initWithAccessKey 
     let credentialsProvider = AWSStaticCredentialsProvider.initWithAccessKey(accessKey, secretKey: secretKey) 
     //^Xcode says - AWSStaticCredentialsProvider.Type does not have a member named ‘initWithAccessKey’ 

Я мог бы совершать очень много ошибок здесь, даже глупые ошибки. Лучшая помощь будет заключаться в том, чтобы указать на некоторый пример кода.

ответ

1

Вы пробовали, как этот

var credentialsProvider: AWSStaticCredentialsProvider = AWSStaticCredentialsProvider.credentialsWithAccessKey("MY_ACCESS_KEY", secretKey: "MY_SECRET_KEY") 
var configuration: AWSServiceConfiguration = AWSServiceConfiguration.configurationWithRegion(AWSRegionUSWest1, credentialsProvider: credentialsProvider) 
AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration 
var transferManager: AWSS3 = AWSS3(configuration: configuration) 
var getImageRequest: AWSS3GetObjectRequest = AWSS3GetObjectRequest.new() 
getImageRequest.bucket = "MY_BUCKET" 
getImageRequest.key = "MY_KEY" 
transferManager.getObject(getImageRequest).continueWithExecutor(BFExecutor.mainThreadExecutor(), withBlock: {(task: BFTask) -> id in if task.error { 
     NSLog("Error: %@", task.error) 
    } 
    else { 
     NSLog("Got image") 
     var data: NSData = task.result.body() 
     dispatch_async(dispatch_get_main_queue(), {  
     var image: UIImage = UIImage.imageWithData(data) 
     myImageView.image = image 

     }) 
+0

Thank you Rajatp. Это намного лучше. Хотя 2 строки кода дают ошибки. Строка, в которой говорится: «var transferManager: AWSS3 = AWSS3 (конфигурация: конфигурация)» сообщает: «init (конфигурация) недоступна: вместо этого используйте« + registerS3WithConfiguration: forKey: »и« + S3ForKey: ». Вторая ошибка в строке: «transferManager.getObject ...». Здесь «Использование необъявленного типа« id »: вы имели в виду использовать« AnyObject »?». Для первой ошибки я попытался использовать registerS3 ... и затем S3ForKey, но оператор S3ForKey Xcode сообщает «Дополнительный аргумент« forKey »при вызове. –

+0

проверить эту ссылку http://sledgedev.com/aws-s3-image-upload-using-aws-sdk-for-ios-v2/ – Rajat

+0

Thx Rajatp. Будет ли обновление, если решение найдено –

0

Я создал пользовательский класс для загрузки изображения. Это сработало для меня.

class AWSImageDownloader { 

    init(AccessKey accessKey:String, SecretKey secretKey:String, andRegion region:AWSRegionType = .USEast1) { 

     let credentialsProvider = AWSStaticCredentialsProvider(accessKey: accessKey, secretKey: secretKey) 
     guard let configuration = AWSServiceConfiguration(region: region, credentialsProvider: credentialsProvider) else { 
      debugPrint("Failed to configure") 
      return 
     } 

     AWSServiceManager.default().defaultServiceConfiguration = configuration 
    } 

    func downloadImage(Name imageName:String, fromBucket bucketName:String, onDownload successCallback:@escaping AWSImageDownloadSuccess, andOnError errorCallback:@escaping AWSImageDownloadError){ 

     let transferManager  = AWSS3.default() 
     let getImageRequest  = AWSS3GetObjectRequest() 
     getImageRequest?.bucket = bucketName 
     getImageRequest?.key = imageName 
     transferManager.getObject(getImageRequest!).continueWith(executor: AWSExecutor.mainThread()) { (anandt) -> Void in 
      if anandt.error == nil { 
       if let imageData = anandt.result?.body as? Data, let image = UIImage(data: imageData) { 

        successCallback(image) 
       } else { 
        errorCallback("Download failed") 
       } 
      } else { 

       let error = "Error \(anandt.error?.localizedDescription ?? "unknown by dev")" 
       errorCallback(error) 
      } 
     } 
    } 
} 
Смежные вопросы