4

我的要求是在用户希望时取消上传。我正在关注 TransferUtility 文档来设置和上传视频、显示进度、即使应用程序处于后台也能保留状态。我找不到任何方法来取消uploadTask。

{
let uploadRequest = AWSS3TransferManagerUploadRequest()
let  transferUtility = AWSS3TransferUtility.default()
var completionHandler : AWSS3TransferUtilityUploadCompletionHandlerBlock?
var uploadTask : AWSTask<AWSS3TransferUtilityUploadTask>?
let expression = AWSS3TransferUtilityUploadExpression()

}


func startUpload() {

uploadTask = transferUtility.uploadFile((uploadRequest?.body)!,
                                   bucket: (uploadRequest?.bucket)!,
                                   key: (uploadRequest?.key)!,
                                   contentType: "video/mov",
                                   expression: expression,
                                   completionHander: completionHandler).continue({ (task) -> AnyObject! in if let error = task.error {
                                    print("Error: \(error.localizedDescription)")
                                    }
                                    if let _ = task.result {

                                    }
                                    return nil;
                                   }) as? AWSTask<AWSS3TransferUtilityUploadTask>


}

我想知道我应该在任务上使用哪个继续块,以及如何像我们在 TransferManager 任务中使用的那样执行类似 uploadTask.cancel() 的操作。

4

2 回答 2

5

从 AWS文档中,您应该使用AWSS3TransferManagerUploadRequest它来取消上传请求。

很简单:

uploadRequest.cancel()

如果你想取消AWSS3TransferUtility任务。您应该直接与他们合作。

使用方法enumerateToAssignBlocks获取所有活动AWSS3TransferUtility任务。或者直接使用方法getUploadTasks()

AWSS3TransferUtility.default().getUploadTasks()

获得所有活动上传任务后,只需使用taskIdentifier每个任务来查找它是什么任务。是的,您应该存储taskIdentifier之前想要取消的任务。

取消方法的示例。

static func cancel(taskIdentifier: UInt) {
        _transferUtility.enumerateToAssignBlocks(forUploadTask: { (uploadTask:AWSS3TransferUtilityUploadTask, progress:AutoreleasingUnsafeMutablePointer<(@convention(block) (AWSS3TransferUtilityTask, Progress) -> Void)?>?, error: AutoreleasingUnsafeMutablePointer<(@convention(block) (AWSS3TransferUtilityUploadTask, Error?) -> Void)?>?) in
            if uploadTask.taskIdentifier == taskIdentifier {
                uploadTask.cancel()
            }
        }, downloadTask: nil)
 }
于 2017-09-20T19:19:55.513 回答
3

当我想取消一个特定的上传请求或所有上传请求时,我使用这两种帮助方法:

static func cancelAllUploads() {
    AWSS3TransferUtility.default().enumerateToAssignBlocks(forUploadTask: { (uploadTask, progress, error) in
        uploadTask.cancel()
    }, downloadTask: nil)
}

static func cancelAllUploads(withTaskId taskId: UInt) {
    AWSS3TransferUtility.default().enumerateToAssignBlocks(forUploadTask: { (uploadTask, progress, error) in
        if uploadTask.taskIdentifier == taskId {
            uploadTask.cancel()
        }
    }, downloadTask: nil)
}
于 2019-10-03T13:15:38.023 回答