iOS – 同步上传到AWS S3
所有的aws-sdk-ios示例都使用AWSS3TransferManager
asynchronous上传数据。
例如: https : //github.com/awslabs/aws-sdk-ios-samples/blob/master/S3TransferManager-Sample/Swift/S3TransferManagerSampleSwift/UploadViewController.swift#L81
现在通常情况下,这是好的,但由于其他原因,我的工作已经在NSOperation
子类中,所以我想同步上传到S3以保持简单(否则,我需要实现一个asynchronousNSOperation
,更多的样板…)
有人知道怎么做吗?
万一有人好奇,我就明白了:
let credentialsProvider = AWSCognitoCredentialsProvider(regionType: AWSRegionType.USEast1, identityPoolId: AwsCognitoIdentityPoolId) let configuration = AWSServiceConfiguration(region: AWSRegionType.USEast1, credentialsProvider: credentialsProvider) AWSServiceManager.defaultServiceManager().defaultServiceConfiguration = configuration let S3Client = AWSS3.defaultS3() let putObjectRequest = AWSS3PutObjectRequest() putObjectRequest.bucket = AwsBucketName putObjectRequest.key = key putObjectRequest.body = logFilePathURL do { let fileAttributes = try self.fileManager.attributesOfItemAtPath(logFilePathURL.path!) let fileSizeNumber = fileAttributes[NSFileSize] as! NSNumber putObjectRequest.contentLength = NSNumber(longLong: fileSizeNumber.longLongValue) } catch _ as NSError { // TODO handle error } S3Client.putObject(putObjectRequest).continueWithBlock { (task: AWSTask) -> AnyObject? in return nil }.waitUntilFinished()
…是啊。 我无法在任何地方find一个例子,所以我不得不阅读源代码并找出结果。 至于那个aws-sdk-ios
库,谈谈过度工程……花了一段时间才弄明白所有那些间接的层次。
无论如何,在我return nil
最后一个块里,就是你要处理错误的地方。