okhttp 内容长度为 -1 大文件

lig*_*igi 2 java okhttp okhttp3

我正在使用 okhttp 下载文件并且一切正常 - 现在我想显示进度并遇到障碍。返回的内容长度为 -1。它从服务器正确返回:

?> ~ curl -i http://ipfs.io/ipfs/QmRMHb4Vhv8LtYqw8RkDgkdZYxJHfrfFeQaHbNUqJYmdF2                                        13:38:11
HTTP/1.1 200 OK
Date: Tue, 14 Jun 2016 11:38:16 GMT
Content-Type: application/octet-stream
Content-Length: 27865948
Run Code Online (Sandbox Code Playgroud)

我在这里将问题追溯到 OkHeaders.java:

 public static long contentLength(Headers headers) {
    return stringToLong(headers.get("Content-Length"));
 }
Run Code Online (Sandbox Code Playgroud)

我在标题中看到所有其他标题 - 但不是 Content-Length - 所以 headers.get("Content-Length") 返回 null。任何人都知道这怎么会丢失?

有趣的是,如果我将 url 更改为“ http://google.com ”,我会从 okhttp 获得内容长度 - 但是 curl 看起来都相同的内容长度 - 这真的让我感到困惑

更新:它似乎与文件的大小相关。如果我使用来自同一服务器的较小的内容,我会得到一个带有 okhttp 的 Content-Length。问题只发生在文件很大的时候

Yur*_*mke 5

看起来服务器使用分块编码超过特定大小,并且您不会获得内容长度。

HTTP/1.1 200 OK
Date: Tue, 14 Jun 2016 14:30:07 GMT
Content-Type: application/octet-stream
Transfer-Encoding: chunked
Run Code Online (Sandbox Code Playgroud)