2013-06-26 100 views
0

我正在使用AFNetworkingAFJSONRequestOperation使用此代碼將圖像和一些參數一起發送到我的REST服務器。AFNetworking - POST文件進度隨機卡住

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]; 

這是隨機的。我的意思是有些時候一切都很完美,有些時候進程在發送過程的中間被阻塞,並以Timeout錯誤結束。

我試圖噸的參數和不同的組合,但我始終有相同的行爲。

PS:我使用框架的最後一個版本。

PS2:我所有的測試都是在兩個模擬器和設備進行,並通過WiFi連接

回答

0

這工作隨機。我的意思是有些時候一切都很完美,有些時候進程在發送過程的中間被阻塞,並以Timeout錯誤結束。

這是服務器端問題。根據您上傳到哪種端點,您可能需要throttle the data rate of the upload

+0

我試着添加方法,但數據包的大小不會從我在ProgressBlock的日誌中看到的變化發生變化,並且如果我添加延遲,則會導致與服務器斷開連接。 我所有的測試都是通過模擬器和手機完成的,並且始終通過Wifi連接。 此外,我只是想補充說,我從來沒有看到我的failureBlock中的「請求身體流枯竭」錯誤。 –

+0

那麼這就縮小了一些可能性。這種或那種方式很難說。這很可能是一個服務器問題,所以儘可能地多,你應該把重點放在那裏進行調試。 – mattt

+0

謝謝我會試着潛入服務器日誌。 –