我正在尝试将文件上传到AWS S3存储桶。如果由于任何原因上传失败,我希望能够重试几次。
我有一个自定义的NSOperation,它的主要方法创建了一个AWSS3TransferManagerUploadRequest()实例。借助AWSS3TransferManager,我启动了上传。
如果出现错误,我应该在task.completionBlock中调用main()吗?还是应该在我的NSOperation的completionBlock中尝试重新启动操作? 以下是一些代码以便更清楚理解。
我有一个自定义的NSOperation,它的主要方法创建了一个AWSS3TransferManagerUploadRequest()实例。借助AWSS3TransferManager,我启动了上传。
如果出现错误,我应该在task.completionBlock中调用main()吗?还是应该在我的NSOperation的completionBlock中尝试重新启动操作? 以下是一些代码以便更清楚理解。
class PhotoUploadOperation: NSOperation {
var photoURL: NSURL!
var fileName: String!
var festival: PFObject!
var sleepTime: NSTimeInterval = 2.0
init(photoURL: NSURL, withFileName fileName:String, forFestival festival: PFObject) {
super.init()
self.photoURL = photoURL
self.fileName = fileName
self.festival = festival
}
override func main() {
let uploadRequest = AWSS3TransferManagerUploadRequest()
uploadRequest.bucket = "festivals123";
uploadRequest.key = fileName
uploadRequest.contentType = "image/jpeg"
uploadRequest.body = photoURL
uploadRequest.ACL = .PublicRead
AWSS3TransferManager.registerS3TransferManagerWithConfiguration(DataManager.shared.awsConfiguration, forKey: "ID1")
let transferManager = AWSS3TransferManager.S3TransferManagerForKey("ID1")
let task = transferManager.upload(uploadRequest)
task.continueWithBlock { (task: AWSTask!) -> AnyObject! in
if (task.faulted) {
print("now we need to restart upload for \(self.fileName)")
NSThread.sleepForTimeInterval(self.sleepTime)
if (self.sleepTime <= 2 ) {
self.sleepTime = self.sleepTime*2
}
self.main()
}
return task
}
}
}