2016-09-06 6 views
1

以前はAWSS3TransferManagerを使用してイメージをs3バケットにアップロードしていましたが、すべて正常に動作していましたが、バックグラウンドアップロードがAWSS3TransferUtilityManagerに切り替えることになりました。私はガイドに示されているとおりにコードを実装しましたが、アップロードが開始されません:iOS用のAWSS3TransferUtilityが動作しません(AWSS3TransferManagerはあります)

インスタンス化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") 
      } 
     } 

を設定し転送ユーティリティ式:

 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 
     }) 

だから私のバケットがUS-ですWest-1とIDプールはUS-Eastにあります-1と私はバケツとアイデンティティプールが同じ領域にあるが、それは私が実装しました次の行との世話をしなければならないことを確認することについて、いくつかの記事があった知っている:

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

行動I完了ハンドラと進捗ブロックコードが決して呼び出されないということです。私はここで何が欠けていますか? AWSS3TransferManagerを使用して同じバケットにアップロードされた/アップロードされたファイルは同じです。

答えて

0

AWSフォーラムからの試行錯誤とインスピレーションによって掘り下げています。どうやらAWSS3TransferUtilityManagerは名前に特殊文字(私の場合はダッシュ)を持つバケットでは機能しません。これはAWSS3TransferManagerの問題ではなかったため、挫折しました。

関連する問題