AWSS3TransferUtilityMultiPartUploadTask-从后台返回的进度值未更新

时间:2018-07-06 20:31:40

标签: ios swift amazon-s3 aws-sdk awss3transferutility

我正在使用AWS iOS SDK将文件上传到S3。我使用AWSS3TransferUtility是因为我想允许后台上传。

后台任务正在运行-大文件可以在后台成功上传。问题是,当我将我的应用重新放回前台时,task.result.progress.fractionCompleted的值将保持为背景之前的值。而且,如果我在上传完成之前将我的应用程序前台显示,则进度值将保持该值,直到完成为止,然后跳至1.0。

当应用回到前台时,我在TransferUtility类上调用enumerateToAssignBlocksForUploadTask:multiPartUploadBlocksAssigner:downloadBlocksAssigner:,然后重新分配进度和完成处理程序。

有人知道什么可能导致该值不更新吗?因此,我不确定如何恢复更新进度条。谢谢!

编辑:这是我开始上传过程的地方。我有一个围绕AWS任务的包装程序,其中包含进度和完成处理程序。

func upload(storagePath: String, sourceURL: URL, _ progressCompletion: @escaping ProgressCompletionCallback)-> UploadTask {

    let expression = AWSS3TransferUtilityMultiPartUploadExpression()
    expression.progressBlock = {(task, progress) in
        DispatchQueue.main.async(execute: {
            print("Progess: \(progress)")
            progressCompletion(false, Float(progress.fractionCompleted), nil)
        })
    }

    var completionHandler: AWSS3TransferUtilityMultiPartUploadCompletionHandlerBlock
    completionHandler = { (task, error) -> Void in
        DispatchQueue.main.async(execute: {
            print("Completed!")
            progressCompletion(true, Float(task.progress.fractionCompleted), error)
        })
    }

    let awsTask = transferUtility.uploadUsingMultiPart(fileURL: sourceURL,
                                         bucket: Constants.bucketName,
                                         key: storagePath,
                                         contentType: "text/plain",
                                         expression: expression,
                                         completionHandler: completionHandler)

    return UploadTask(task: awsTask,
                      progressBlock: expression.progressBlock!,
                      completionBlock: completionHandler)

}

1 个答案:

答案 0 :(得分:0)

下载文件时,我遇到了同样的问题。 Here是我在其github页面上打开的问题的链接,至少在下载文件的情况下。他们不会收到来自所使用的NSURLSession类的回调。您的情况可能与此类似。