使用AFJSONRequestOperation和filedata的AFNetworking永远不会完成

我正在使用AFNetworking将json数据发布到我的web服务并获得一个json响应。 不过现在我也想把多部分formdata添加到这些POST中。 如果我这样做(即使没有我首先添加的参数)完成块永远不会触发。 进度块确实会触发,我可以看到文件正确上传。

有没有人有任何经验张贴AFNetworking像这样的图像? 我正在使用最新的AFNetworking来源/版本。

这是我的初始代码发布与json在其中的字典。 这工作正常。

NSMutableDictionary *postdata = [[NSMutableDictionary alloc] init]; [postdata setObject:[postdictionary JSONString] forKey:@"request"]; NSMutableURLRequest *jsonRequest = [httpClient requestWithMethod:@"POST" path:path parameters:postdata]; AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:jsonRequest success:^(NSURLRequest *request, NSHTTPURLResponse *response, id JSON) {// Success} failure:^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error, id JSON) {// Failure }]; [operation start]; 

这是提交图像的代码版本(不起作用)

 NSMutableURLRequest *jsonRequest jsonRequest = [httpClient multipartFormRequestWithMethod:@"POST" path:path parameters:postdata constructingBodyWithBlock: ^(id <AFMultipartFormData> formData) { [formData appendPartWithFileData:imageData name:@"photo" fileName:@"photo.jpg" mimeType:@"image/jpeg"]; [formData throttleBandwidthWithPacketSize:5000 delay:0.1]; }]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:jsonRequest]; [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite); }]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"Upload succes"); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Upload failed"); }]; [operation start]; 

我在一些应用程序上使用这个代码,并没有任何问题(注意我正在使用AFJSONRequestOperation和AFRestClient)

设置请求

 // I have a shared singleton in a separate file APIClient.h AFRESTClient *httpClient = [APIClient sharedClient]; NSURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:method parameters:params constructingBodyWithBlock: ^(id <AFMultipartFormData> formData) {[formData appendPartWithFileData:imageData name:@"image" fileName:@"image.png" mimeType:@"image/png"]; }]; 

那么操作,

 AFJSONRequestOperation *operation = [[AFJSONRequestOperation alloc] initWithRequest:request]; 

我的进度块

 [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite); CGFloat progress = ((CGFloat)totalBytesWritten) / totalBytesExpectedToWrite * 100; [SVProgressHUD showProgress:50 status:[NSString stringWithFormat:@"%0.1f %%", progress]]; }]; 

成功块(我的API返回一个stat -ok或失败,然后数据(与flickr API相同)

 [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id response) { NSLog(@"response string: %@", operation.responseString); NSString *resultStat = [response objectForKey:@"stat"]; if ([resultStat isEqualToString:@"ok"]) { //success // do something with your data that is returned from the API } else { //error NSLog(@"Data Error: %@", response); } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", [error localizedDescription]); }]; [httpClient enqueueHTTPRequestOperation:operation]; 

无法看到您的代码的任何问题,几乎没有可能性:

尝试设置短超时间隔,并检查请求是否完成[request setTimeoutInterval:5];

也尝试注释节stream线,看看它是否改变任何东西