iOS – 同步上传到 AWS S3
iOS – Upload to AWS S3 synchronously
所有aws-sdk-ios示例使用AWSS3TransferManager
上传数据异步.
现在通常这很好,但由于其他原因我的工作已经在 NSOperation
子类中,所以我想同步上传到 S3 以保持简单(否则,我需要实现异步 NSOperation
,并且有更多的样板...)
有人知道怎么做吗?
如果有人好奇,我想通了:
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()
...是的。我找不到示例 anywhere,所以我不得不阅读源代码并找出答案。至于那个 aws-sdk-ios
库,谈论过度工程......花了一些时间通过所有这些间接层来弄清楚它。
无论如何,在我 return nil
的最后一个块中,您将在那里处理错误等
所有aws-sdk-ios示例使用AWSS3TransferManager
上传数据异步.
现在通常这很好,但由于其他原因我的工作已经在 NSOperation
子类中,所以我想同步上传到 S3 以保持简单(否则,我需要实现异步 NSOperation
,并且有更多的样板...)
有人知道怎么做吗?
如果有人好奇,我想通了:
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()
...是的。我找不到示例 anywhere,所以我不得不阅读源代码并找出答案。至于那个 aws-sdk-ios
库,谈论过度工程......花了一些时间通过所有这些间接层来弄清楚它。
无论如何,在我 return nil
的最后一个块中,您将在那里处理错误等