我正在使用 AWS iOS 开发工具包将文件上传到 S3。我正在使用AWSS3TransferUtility
,因为我想允许后台上传。
后台任务正在运行 - 一个大文件可以在后台成功上传。问题是,当我将我的应用程序带回前台时,该task.result.progress.fractionCompleted
值保持在后台之前的值。如果我在上传完成之前将我的应用程序置于前台,进度值将保持在该值,直到完成,然后跳转到 1.0。
当应用程序回到前台时,我调用enumerateToAssignBlocksForUploadTask:multiPartUploadBlocksAssigner:downloadBlocksAssigner:
了我的 TransferUtility 类,并重新分配了进度和完成处理程序。
有谁知道什么可能导致该值不更新?因此,我不确定如何继续更新我的进度条。谢谢!
编辑:这是我开始上传过程的地方。我有一个围绕 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)
}