如何在ios之间取消多部分上传文件(如何取消后台线程)

时间:2016-02-03 11:11:12

标签: ios objective-c multithreading image-uploading multipartform-data

您好我正在使用此代码通过multiparts格式将图像上传到服务器。和一切工作文件。但根据我的要求,如果图像数据很重(大),那么我想取消之间的上传。

我的代码是

 NSString *imagePostUrl = [NSString stringWithFormat:@"%@/users/%@/profilepic",Kwebservices,[[NSUserDefaults standardUserDefaults] valueForKey:@"l_userid"]];
//
NSString *fileName = [NSString stringWithFormat:@"profilePic%ld%c%c.png", (long)[[NSDate date] timeIntervalSince1970], arc4random_uniform(26) + 'a', arc4random_uniform(26) + 'a'];


AFHTTPRequestOperationManager *manager = [[AFHTTPRequestOperationManager alloc] initWithBaseURL:[NSURL URLWithString:@"http://server.url"]];


NSDictionary *parameters = @{@"":@""};
AFJSONResponseSerializer *responseSerializer = [AFJSONResponseSerializer serializerWithReadingOptions:NSJSONReadingAllowFragments];
[manager setResponseSerializer:responseSerializer];
manager.securityPolicy.allowInvalidCertificates = YES;

manager.responseSerializer.acceptableContentTypes = [manager.responseSerializer.acceptableContentTypes setByAddingObject:@"text/html"];

AFHTTPRequestOperation *op = [manager POST:imagePostUrl parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) {

    [formData appendPartWithFileData:imagedata name:fileName fileName:@"photo.jpg" mimeType:@"image/jpeg"];


} success:^(AFHTTPRequestOperation *operation, id responseObject) {
    NSLog(@"Success: %@ ***** %@", operation.responseString, responseObject);

    NSURL *imageURL = [NSURL URLWithString:imagestr1];
    imageViewProfile.image = [UIImage imageWithData:[NSData dataWithContentsOfURL:imageURL]];

    [kappDelegate HideIndicator];

} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
    NSLog(@"Error: %@ ***** %@", operation.responseString, error);

    [HelperAlert alertWithOneBtn:AlertTitle description:@"Failed to upload selected profile picture" okBtn:OkButtonTitle];

    [kappDelegate HideIndicator];

    return ;
}];
[op start];

如何在中间停止上传过程。

2 个答案:

答案 0 :(得分:1)

您可以保留对该操作的引用,并调用NSOperation方法cancel

有关如何处理此问题的更多信息:

<强>步骤:

  1. 声明属性:@property (strong, nonatomic) AFHTTPRequestOperation *imagePostOperation;
  2. 使用self.imagePostOperation = [manager POST:imagePostUrl ...
  3. 替换代码中的主题声明
  4. 如果要取消操作:[self.imagePostOperation cancel]
  5. 在操作成功/失败回调块中,选中[operation isCancelled]以管理该案例。

答案 1 :(得分:0)

[(AFHTTPRequestOperationManager *)manager.operationQueue cancelAllOperations];