NSURLSession,上传任务 - 获取实际传输的字节数

时间:2015-05-29 06:40:49

标签: ios afnetworking-2 nsurlsession nsurlsessionuploadtask

我收到错误报告,说我的iOS应用程序无法在慢速连接上传图像。虽然我的超时可能不够高,但还有另一个问题。

我发现上传进度很快就达到了100%,尽管我可以在Charles中看到字节仍在传输中。我使用以下NSURLSession方法:

- (NSURLSessionUploadTask *)uploadTaskWithRequest:(NSURLRequest *)request
                                     fromData:(NSData *)bodyData
                            completionHandler:(void (^)(NSData *data,
                                                        NSURLResponse *response,
                                                        NSError *error))completionHandler

并实现以下委托方法以接收进度事件:

- (void)URLSession:(NSURLSession *)session
              task:(NSURLSessionTask *)task
   didSendBodyData:(int64_t)bytesSent
    totalBytesSent:(int64_t)totalBytesSent
totalBytesExpectedToSend:(int64_t)totalBytesExpectedToSend

实际上我正在使用AFNetworking 2.5.2,它使用这种方法。我的理论是这个委托方法报告从电话发送的字节而不是实际传输的字节。

在非常低的连接下发送300kb将立即发送5-6个包,并在等待接收时报告100%的进度。

是否可以获得已确认已传输的实际字节数的进度事件?

1 个答案:

答案 0 :(得分:1)

是的,这是可能的!

[operation setUploadProgressBlock:^(NSInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) {
     float prog = (totalBytesWritten / (totalBytesExpectedToWrite * 1.0f) * 100);
     [self.progBar setProgress:prog];
     NSLog(@"%f%% Uploaded", (totalBytesWritten / (totalBytesExpectedToWrite * 1.0f) * 100));

     }];