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

标签 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

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

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

实际上我正在使用 AFNetworking 2.5.2,它使用了这种方法。我的理论是,此委托(delegate)方法报告的是从手机发送的字节数,而不是实际传输的字节数。

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

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

最佳答案

是的,这是可能的!

[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));

     }];

关于ios - NSURLSession,上传任务 - 获取传输的实际字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30522793/

相关文章:

ios - AFNetworking 错误域代码=-1011 "Request failed: internal server error (500)"

ios - 用 NSURLSession 替换 NSURLConnection

ios - CABasicAnimationanimationDidStart确实被调用,但animationDidStop从未被调用

ios - 当 CoreML sqeezeNet 模型的 request.results 被转换为 [VNRectangleObservation] 时,应用程序崩溃

ios - 无法创建class的实例,导致应用崩溃

ios - Cordova/appFramework 应用程序在 iOS 上显示为空白

ios - AFHTTPSessionManager 子类 swift

ios - AFNetworking 不工作

ios - 从 "SecTrustCopyPublicKey"调用收到的值的含义

Swift 后台数据任务