我正在使用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。只有当文件很大时才会出现问题
答案 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