以前は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を使用して同じバケットにアップロードされた/アップロードされたファイルは同じです。