我的要求是在用户希望时取消上传。 我正在关注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()这样的事情。
答案 0 :(得分:2)
在AWS documentation中,您应该使用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)
}
答案 1 :(得分:1)
当我想取消一个特定的上载请求或所有上载请求时,我使用这两种帮助方法:
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)
}