【发布时间】:2009-06-10 13:37:18
【问题描述】:
我使用 NSURLConnection 从 iPhone 上的网络下载大文件。我使用“didReceiveData”方法将数据附加到 Documents 文件夹中的文件中。它工作正常。
如果下载中断(例如,因为用户按下“主页”按钮),我希望能够在用户下次启动我的应用程序时继续下载,而不是从头开始!
谁能帮帮我?
【问题讨论】:
我使用 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 标准,了解如何形成从特定偏移量开始传输资源的请求。暂时找不到任何代码,抱歉。
【讨论】: