okhttp content-length是大文件的-1

时间:2016-06-14 11:41:23

标签: 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

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

 public static long contentLength(Headers headers) {
    return stringToLong(headers.get("Content-Length"));
 }

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

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

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

1 个答案:

答案 0 :(得分:4)

看起来服务器使用chunked encoding以上的某个尺寸,您就不会获得内容长度。

HTTP/1.1 200 OK
Date: Tue, 14 Jun 2016 14:30:07 GMT
Content-Type: application/octet-stream
Transfer-Encoding: chunked