通常我在下载要保存到磁盘的文件时使用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
,看看是否能解决问题。
答案 0 :(得分:0)
发送Transfer-Encoding = identity
修复它并导致服务器/应用程序永远没有块。