4

我正在尝试实现大文件的下载并向用户显示当前进度,但阻止:

-[AFURLConnectionOperation setDownloadProgressBlock:] 

返回不正确的bytesReadtotalBytesRead值(它们小于应有的值)。

例如:如果我有一个 90MB 的文件并且当它完全下载时,最新的块调用setDownloadProgressBlock:给我totalBytesRead大约 30MB 的值。另一方面,如果文件是 2MB 大,最新的块调用会给出正确的totalBytesRead2MB 值。

AFNetworking 从 github 更新到最新版本。
如果 AFNetworking 无法正确执行,我可以使用什么解决方案?

编辑:我已经确定即使文件没有完全下载(并且每次文件相对较大时都会发生这种情况)AFNetworking 调用成功块:

-[AFHTTPRequestOperation setCompletionBlockWithSuccess:failure:]

我在这里问了一个关于这种情况的类似问题,但没有得到任何答案。
我可以检查下载的代码和实际文件大小,但AFNetworking没有用于继续部分下载的 API。

4

2 回答 2

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;
    }];
于 2012-11-03T11:34:52.380 回答
1

phix23 回答了我最初的问题,所以进度块确实没有问题。我正在回答我的编辑。

当成功阻止时

-[AFHTTPRequestOperation setCompletionBlockWithSuccess:failure:]

调用时,我可以将下载的字节数与预期下载的字节数进行比较(在代码中实现起来并不难)。如果下载的字节数较少 - 我可以从中断的地方继续下载文件。为此,我在 中使用Rangehttp 标头NSURLRequest,这里有更多信息:
继续在 iPhone 上中断下载
如何在 iPhone SDK 上实现可恢复的文件下载

所以,问题不在于 AFNetworking(NSURLConnection 具有相同的行为),但我认为框架的开发人员可以考虑这种情况。

于 2012-11-04T17:57:33.903 回答