AFNetworking - POST文件进度随机卡住

时间:2013-06-26 10:36:59

标签: iphone objective-c cocoa rest afnetworking

我正在使用 AFNetworking AFJSONRequestOperation ,使用此代码将图像以及一些参数发布到我的REST服务器。

NSData* uploadFile = nil;
if ([params objectForKey:@"file"]) {
    uploadFile = (NSData*)[params objectForKey:@"file"];
    [params removeObjectForKey:@"file"];
}

NSMutableURLRequest *apiRequest =
[self multipartFormRequestWithMethod:@"POST"
                                path:kAPIPath
                          parameters:params
           constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {
               if (uploadFile) {
                   [formData appendPartWithFileData:uploadFile
                                               name:@"file"
                                           fileName:@"photo.jpg"
                                           mimeType:@"image/jpeg"];
                   [formData throttleBandwidthWithPacketSize:5000 delay:kAFUploadStream3GSuggestedDelay];

               }
           }];


AFHTTPRequestOperation *operation2 = [[AFJSONRequestOperation alloc] initWithRequest: apiRequest];
[operation2 setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation2, id responseObject) {
    //success!
    completionBlock(responseObject);
} failure:^(AFHTTPRequestOperation *operation2, NSError *error) {
    //failure :(
    completionBlock([NSDictionary dictionaryWithObject:[error localizedDescription] forKey:@"error"]);
}];
[operation2 setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
    if (self.delegate) {
        NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite);
        [self.delegate didReceiveData:(totalBytesWritten / (float)totalBytesExpectedToWrite)];
    }
}];

[[API sharedInstance] enqueueHTTPRequestOperation:operation2];

这是随机的。我的意思是有些时候一切都运行得很好,有时候在发送过程中卡住了进度,并以超时错误结束。

我尝试了大量的参数和不同的组合,但我总是有相同的行为。

PS:我使用的是最新版本的框架。

PS2:我的所有测试都是在模拟器和设备上完成的,也是通过Wifi连接进行的

1 个答案:

答案 0 :(得分:0)

  

这是随机的。我的意思是有些时候一切都运行得很好,有时候在发送过程中卡住了进度,并以超时错误结束。

这是服务器端问题。根据您上传到的端点类型,您可能需要throttle the data rate of the upload