我想从服务器下载一个大文件(> 500MB)到我的应用程序。我使用NSURLConnection,如果网络非常好,那就很好。但有时我试图下载500MB文件,但如果网络不是很好,只能下载200MB或100MB文件。这意味着当任务没有完成时,我得到了connectionDidFinishLoading方法。有人说设置超时秒来避免这种情况,但我设置超时30秒,它不工作。我应该设置60s或更多?有人有更好的主意,请帮助我。NSURLConnection(下载大于500M的大文件)
回答
in connectionDidFinishLoading
方法每次检查要下载的数据的长度和下载的数据。
长度要下载此[response expectedContentLength];
在didReceiveResponse
方法
你不能指望预期的内容长度。对于服务器来说,它是可选的。 – fbernardo 2012-03-07 10:38:56
你应该下载这样的大文件中的部分涨幅。在HTTP请求的标题中指定Content-Range字段,并且一次只询问文件的一小部分。当你获得所有部分时,你可以将文件组装在一起。
您可以使用NSMutableURLRequest setValue:@"0-1023/*" forHTTPHeaderField:@"Content-Range"];
来设置HTTP标头,该示例仅下载文件的第一个千字节。请参见http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html中的内容范围
另外,并非所有服务器都支持Content-Range。我记得例如用于拒绝非付费用户的部分下载,因为使用Content-Range可以继续下载。使用这种类型的服务器,您可以全部下载,也可以不下载。 – fbernardo 2012-03-07 10:40:55
@fbernardo是对的,你必须检查你的服务器是否支持这个。我以某种方式假设你可以控制服务器。如果它不支持,除了希望你的文件将作为一个整体到达,没有什么可做的。 – MrTJ 2012-03-07 10:42:56
你是对的,它看起来好像他控制着服务器,我只是建议构建可在多种情况下工作的可移植代码会更好...... – fbernardo 2012-03-07 10:47:44
- 1. NSURLConnection下载大zip文件
- 2. NSURLConnection下载大文件(> 40MB)
- 3. Android下载的文件大小大于下载大小
- 4. 大文件下载
- 5. 下载大文件
- 6. 在Android上下载文件大于文件大小
- 7. 使用NSURLConnection下载大尺寸(MB).txt文件
- 8. TFS下载文件大于1GB
- 9. iOS:NSFileHandle vs NSOutputStream用于大文件下载
- 10. Android的下载大文件
- 11. LWP GET大文件下载
- 12. 安卓下载大文件
- 13. 下载大量小文件
- 14. 在Heroku下载大文件
- 15. 安卓下载大文件
- 16. Silverlight大文件下载器
- 17. 下载大量文件
- 18. CURL_RETURNTRANSFER下载大文件
- 19. Jsp下载文件大小
- 20. mule jersey下载大文件
- 21. X-Sendfile如果文件大小大于4G,则无法下载
- 22. NSURLConnection的接收“假”的文件下载
- 23. 下载带有最大文件大小限制的.zip文件
- 24. iOS大文件下载〜1GB文件
- 25. 如何确定使用NSURLConnection下载文件的大小(以字节为单位)?
- 26. 奇怪的多个文件下载 - NSURLConnection
- 27. 用node.js解析大型XML 500M
- 28. NSURLConnection无法http发布大文件
- 29. 限制WebClient下载文件最大文件大小
- 30. 文件下载代码下载文件比原来大
因此,在下载所有数据之前,您已经获得了'connectionDidFinishLoading'?这听起来不对。如果没有下载所有的数据,我希望得到一个错误。 – mattjgalloway 2012-03-07 09:58:12
这确实听起来不对,你可以发布一些测试代码吗?你的网络意味着什么不太好? – fbernardo 2012-03-07 10:41:51
如果他们解决了您的问题,您应该接受答案。 – MrTJ 2012-03-14 09:22:03