我收到了有关我的iOS应用在慢速连接上传图像失败的错误报告。尽管我的超时时间可能不够长,但还有另一个问题。
我发现即使在Charles中可以看到仍在传输字节,上传进度也快速达到了100%。 我使用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%的进度,同时等待接收它们。
是否可能获取有关已确认传输的实际字节数的进度事件?
operation
是一个AFHTTPRequestOperation
。恐怕这与使用会话的上述方法存在相同的“缺陷”。 - Nicolai Dahl