Я ранее использовал 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