我使用 NSURLConnection 从 iPhone 上的网络下载大文件。我使用“didReceiveData”方法将数据附加到 Documents 文件夹中的文件中。它工作正常。
如果下载中断(例如,因为用户按下“主页”按钮),我希望能够在用户下次启动我的应用程序时继续下载,而不是从头开始!
任何人都可以帮助我吗?
ASIHTTPRequest具有易于使用的恢复下载支持:
http://allseeing-i.com/ASIHTTPRequest/How-to-use#resume
或者,通过查看现有数据的大小来了解您已经下载了多少数据,并在NSMutableURLRequest上设置“范围”标头:
[request addValue:@"bytes=x-" forHTTPHeaderField:@"Range"];
..其中 x 是您已经拥有的数据的大小(以字节为单位)。这将从字节 x 开始下载数据。然后,您可以在收到文件时将此数据附加到文件中。
请注意,您从中下载的 Web 服务器必须支持您尝试下载的资源的部分下载 - 如果支持,它会发送 Accept-Ranges 标头。您通常不能恢复下载动态生成的内容(例如,由服务器上的脚本生成的页面)。
我能想到的唯一方法是将要下载的文件分解为较小的文件。您可以使用
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
方法来确定文件的每个部分何时完成,并在最后一个未下载的部分重新开始下载。
查看 HTTP 标准,了解如何形成从特定偏移量开始传输资源的请求。我找不到任何代码,对不起。