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

标签 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)

}

最佳答案

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

关于ios - AWSS3TransferUtilityMultiPartUploadTask - 从后台返回的进度值未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51217235/

相关文章:

amazon-web-services - 访问 Amazon S3 时需要 HTTP 407 代理身份验证

amazon-web-services - 如何创建预签名的 put url 并使用环境变量来设置 Bucket 和 Key

c++ - Firebase:可以混合使用 C++ 和 Objective-C SDK 吗?

ios - Text大于Height时如何增加UITextView的高度

php - 发送到服务器时 Base64 不完整

arrays - 将 unicode 代码点数组转换为字符串

ios - Swift 扩展子句 where this or that

php - 字段中格式错误的 Unicode 代码序列

ios - 操作对象数组时出错

ios - 滑出菜单 - 切换回原始 Controller 时,导航栏消失