我正在尝试实施大型文件的下载并向用户显示当前进度,但阻止在:
-[AFURLConnectionOperation setDownloadProgressBlock:]
返回错误的bytesRead
和totalBytesRead
值(它们比它们应该的小)。
例如:如果我有一个90MB的文件,当它完全下载时,setDownloadProgressBlock:
中的最新块调用给我totalBytesRead
值大约30MB。另一方面,如果文件大小为2MB,则最新的块调用会给出正确的totalBytesRead
2MB值。
AFNetworking从github更新到最新版本 如果AFNetworking无法正确执行,我可以使用什么解决方案?
编辑:我已经确定即使文件没有完全下载(每次使用相对较大的文件时都会发生这种情况),AFNetworking会调用成功块:
-[AFHTTPRequestOperation setCompletionBlockWithSuccess:failure:]
关于这种情况,我问了一个类似的问题here,但没有得到任何答案
我可以检查已下载的代码和实际文件大小,但AFNetworking
没有继续部分下载的API。
答案 0 :(得分:12)
我对AFNetworking中的setDownloadProgressBlock没有任何问题。
wiki解释了如何跟踪下载进度: https://github.com/AFNetworking/AFNetworking/wiki/AFNetworking-FAQ
对于进度跟踪,您不需要bytesRead
(在特定回调中写入的字节数)。
示例代码:
[downloadoperation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
float progress = ((float)totalBytesRead) / totalBytesExpectedToRead;
self.progressView.progress = progress;
}];
答案 1 :(得分:1)
phix23回答了我的初步问题,因此进度块确实没有问题。我正在回答我的编辑。
成功阻止
-[AFHTTPRequestOperation setCompletionBlockWithSuccess:failure:]
调用,我可以将下载的字节数与预期下载的字节数进行比较(在代码中实现起来并不是很难)。如果下载的字节数较小 - 我可以从中断的地方继续下载文件。为此,我在Range
中使用NSURLRequest
http标头,以下是更多信息:
Continue an interrupted download on iPhone
How to implement resumable file downloads on iPhone SDK
所以,问题不在于AFNetworking(NSURLConnection有相同的行为),但我认为,框架的开发人员可以考虑这种情况。