我正在使用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)
}
答案 0 :(得分:0)
下载文件时,我遇到了同样的问题。 Here是我在其github页面上打开的问题的链接,至少在下载文件的情况下。他们不会收到来自所使用的NSURLSession
类的回调。您的情况可能与此类似。