如何在不使用URLSessionDownloadTask使用的自动分块的情况下下载大文件

时间:2018-04-20 12:53:53

标签: ios macos networking

通常我在下载要保存到磁盘的文件时使用URLSessionDownloadTask,但是我意识到这会自动将下载分成块并发出大量HTTP请求直到完成。我正在与一个不支持分块的非常规Web服务器交谈,因为它只允许单个连接开始下载文件。在该请求完成后,该文件不再可用,因此在第一个请求失败后的任何块请求。这些文件可以是从几KB到GB的任何地方,所以无论我做什么都不需要尝试将整个文件保存在内存中。我没有看到任何方法来禁用URLSessionDownloadTask上的分块,我的Android对手转而使用"流媒体"它现在对他来说很好。看起来我可能需要使用URLSessionStreamTask并手动处理所有通信,但我并不确定。

当我使用URLSessionDownloadTask进行下载时,响应标头为:

elements ▿ 0 : 2 elements ▿ key : AnyHashable("Content-Type") - value : "Content-Type" - value : application/octet-stream ▿ 1 : 2 elements ▿ key : AnyHashable("Connection") - value : "Connection" - value : keep-alive ▿ 2 : 2 elements ▿ key : AnyHashable("Content-Length") - value : "Content-Length" - value : 85204043 ▿ 3 : 2 elements ▿ key : AnyHashable("Date") - value : "Date" - value : Fri, 20 Apr 2018 09:12:57 GMT ▿ 4 : 2 elements ▿ key : AnyHashable("Server") - value : "Server" - value : nginx/1.10.3 ▿ 5 : 2 elements ▿ key : AnyHashable("Etag") - value : "Etag" - value : "852040431517695334"

我刚刚了解了Transfer-Encoding,我试图将其设置为Identity,看看是否能解决问题。

1 个答案:

答案 0 :(得分:0)

发送Transfer-Encoding = identity修复它并导致服务器/应用程序永远没有块。