0

我正在使用 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)

}
4

1 回答 1

0

我在下载文件时遇到了同样的问题。是我在他们的 github 页面上打开的问题的链接,至少在下载文件的情况下。他们没有收到来自NSURLSession正在使用的类的回调。在你的情况下,这可能是类似的。

于 2018-12-17T04:37:44.283 回答