2016-09-06 1 views
1

Я ранее использовал AWSS3TransferManager для загрузки изображений в мое ведро s3, и все было отлично, но я решил, что фоновые загрузки необходимы, поэтому решили переключиться на AWSS3TransferUtilityManager. Я реализовал код в точности так, как показано в руководстве, но загрузка никогда не начинается:AWSS3TransferUtility для iOS не работает (AWSS3TransferManager - это хотя)

Instantiate AWS кодекса (В приложении делегат - didFinishLaunching ...):

//AWS SDK 
    let credentialsProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.USEast1, identityPoolId: "my_pool_id")   
    let configuration = AWSServiceConfiguration(region: AWSRegionType.USWest1, credentialsProvider: credentialsProvider) 
    AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration 

Настройка временного каталога для сохранения изображения чтобы для загрузки:

 //Set up and potentially clear temporary image directory before uploading 
     let path = (NSTemporaryDirectory() as NSString).stringByAppendingPathComponent("image.png") 
     let thumbnailUrl = NSURL(fileURLWithPath: path) 

     var error: NSError? = nil 
     if NSFileManager.defaultManager().fileExistsAtPath(thumbnailUrl.path!) { 
      do { 
       try NSFileManager.defaultManager().removeItemAtPath(thumbnailUrl.path!) 
       print("Successfully cleared temporary directory") 

      } catch let fileError as NSError { 
       error = fileError 
       print("Error clearing temporary image directory") 
      } 
     } 

Настройка Expression Utility Перевод:

 let expression:AWSS3TransferUtilityUploadExpression = AWSS3TransferUtilityUploadExpression() 

Прогресс код обновления:

 //------------------------- 
     //Progress Bar Update 
     expression.progressBlock = { (task: AWSS3TransferUtilityTask,progress: NSProgress) -> Void in 
      dispatch_async(dispatch_get_main_queue(),{ 

       print("Image upload progress update: \(progress.fractionCompleted)") 

      }) 
     } 

Марк ACL, как общественное

 //Mark ACL as public 
     expression.setValue("public-read", forRequestParameter: "x-amz-acl") 
     expression.setValue("public-read", forRequestHeader: "x-amz-acl") 

код обработчика завершения:

 //------------------------- 
     //Completion handler 
     self.imageUploadCompletionHandler = { (task:AWSS3TransferUtilityUploadTask, error:NSError?) -> Void in 

      print("Image upload complete") 

      dispatch_async(dispatch_get_main_queue(), { 

       if(error != nil){ 
        print("Failure uploading thumbnail") 

       }else{ 
        print("Success uploading thumbnail") 
       } 

      }) 
     } 

Загрузить:

 //-------------------------- 
     //Upload Thumbnail 
     AWSS3TransferUtility.defaultS3TransferUtility().uploadFile(thumbnailUrl, bucket: "exampleBucket", key: "exampleKey", contentType: "image/jpeg", expression: expression, completionHander: self.imageUploadCompletionHandler).continueWithBlock({ (task:AWSTask) -> AnyObject? in 

      if(task.error != nil){ 
       print("Error uploading thumbnail: \(task.error)") 
       s3RequestSuccessful = false 

      } 

      if(task.exception != nil){ 
       print("Exception uploading thumbnail: \(task.exception)") 
       s3RequestSuccessful = false 

      } 

      if(task.result != nil){ 
       print("Starting upload...") 
      } 
      return nil 
     }) 

Так что мое ведро в нас- Запад-1 и пул идентификации в США-Востоке -1, и я знаю, что были некоторые сообщения о убедившись, что ведро и удостоверение пул находится в том же регионе, но которые должны быть учтены с помощью следующей строки, которые я реализованный:

let configuration = AWSServiceConfiguration(region: AWSRegionType.USWest1, credentialsProvider: credentialsProvider) 

Поведения I get - это то, что обработчик завершения и код блока прогресса никогда не вызываются. Что мне здесь не хватает? Еще раз, загрузки были/отлично работают с одним и тем же ковшом с помощью AWSS3TransferManager

ответ

0

Выяснил это, пройдя пробную версию и ошибки и вдохновение на форумах AWS. Очевидно, что AWSS3TransferUtilityManager не работает с ведрами, у которых есть специальные символы в их именах (в моем случае тире). Разочарование, потому что это не проблема с AWSS3TransferManager.

Смежные вопросы