我想從服務器下載一個大文件(> 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