Swift 3:Transfer Utility,如何在失败后重试上传?

时间:2017-01-25 11:16:41

标签: ios swift amazon-web-services amazon-s3 aws-sdk

这就是我的completionHandler的样子:

self.completionHandler = { (task, error) -> Void in
        DispatchQueue.main.async(execute: {
            if ((error) != nil){

                //retry upload
            }

            else{

                //success
            }
        })

    }

我没有看到任何可以task重试的方法,我只看到continue方法,但不知道如何使用它。

我首次按以下方式开始上传:

transferUtility.uploadData(
        data as Data,
        bucket: "test",
        key: "testTU3/try\(Date()).jpeg",
        contentType: "image/jpeg",
        expression: expression,
        completionHander: completionHandler).continue(successBlock: { (task) -> AnyObject! in
            if let error = task.error {
                NSLog("Error: %@",error.localizedDescription);

            }
            if let exception = task.exception {
                NSLog("Exception: %@",exception.description);

            }
            if let _ = task.result {

                NSLog("Upload Starting!")
                // Do something with uploadTask.
            }

            return nil;
        })

失败后如何在completionHandler中重试上传?

修改

这是我尝试的内容

 self.completionHandler = { (task, error) -> Void in
        DispatchQueue.main.async(execute: {
            if ((error) != nil){
                guard let data = task.request?.httpBody else {return}
                self.uploadData(data: data as NSData, bucket: task.bucket, key: task.key)

            }

            else{
            }
        })
    }

但问题是我无法获得请求的实际数据

task.request?.httpBody评估为零。

这种做法是个好主意吗?我知道这可能导致无休止的循环

1 个答案:

答案 0 :(得分:0)

转移实用程序不支持重试,您必须在失败后自行拨打电话。

关于您的代码。如果调用continue(successBlock:)方法,则只有在上载成功时才会执行块内的代码。还有另一种变体continue(block:),即使出现错误也会执行。