iOS - 同步上传到AWS S3

3
所有的aws-sdk-ios示例都使用 AWSS3TransferManager 异步上传数据。

例如:https://github.com/awslabs/aws-sdk-ios-samples/blob/master/S3TransferManager-Sample/Swift/S3TransferManagerSampleSwift/UploadViewController.swift#L81

通常情况下,这是好的,但我的工作已经在一个 NSOperation 子类中,出于其他原因,所以我想同步上传到S3,以保持简单(否则,我需要实现一个异步 NSOperation ,这有很多样板代码...)

有人知道如何做到这一点吗?

1个回答

10

如果有人感兴趣,我已经想出来了:

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

...是的。我无法在任何地方找到一个例子,所以我不得不阅读源代码并弄清楚事情。至于aws-sdk-ios库,谈论过度工程...通过所有这些间接层花费了一些时间来弄清楚它。

无论如何,在我返回nil的最后一个块中,你可以处理错误等问题。


浪费了很多时间后,这其实就是我需要做的!非常简单明了的答案。 - juliancadi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接