---- shouldCancelHandler:(BOOL (^)(void))cancelHandler
{
...
QNUploadOption *option = [[QNUploadOption alloc]initWithMime:nil progressHandler:^(NSString *key, float percent) {
NSLog(@"key====%@, percent=====%.2f", key, percent);
if (progressHandler) {
progressHandler(key,percent);
}
} params:nil checkCrc:NO cancellationSignal:cancelHandler];
QNUploadManager *manager = [[QNUploadManager alloc] init];
[manager putData:data key:nil token:token complete:^(QNResponseInfo *info, NSString *key, NSDictionary *resp) {
if (resp != nil &&
[resp isKindOfClass:[NSDictionary class]] &&
resp[@"key"]) {
callback (YES,[resp objectForKey:@"key"]);
} else {
callback (NO,@"上传七牛失败");
}
} option:option];
....
}
直接上代码吧。
QNUploadManager 管理每一个上传任务。其中option 有个cancellationSignal的入参block,该block就是我们处理能否取消任务的关键,block是带返回值的,无参。
我的看法是,上传过程中会定期读取该block的值,一定发现block== YES(取消),则任务取消。
那么为何要这样设计呢?
网友评论