2016-06-14 620 views
1

我正在用okhttp下载一个文件,并且事情工作正常 - 现在我想显示进度并且碰到路障。返回的内容长度是-1。 这又回到正确的从服务器: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")); 
} 

我在这里看到的所有其它头在头 - 但不是内容长度 - 所以headers.get(“Content-Length”)返回null。任何人都有线索如何可能会丢失?

有趣的是,如果我更改URL为“http://google.com”我从okhttp内容长度 - 但卷曲看起来都一样的Content-Length明智的 - 这真的让我困惑

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

+0

“文件很大”的字节数是多少? – Robert

+0

27兆字节的大小 – ligi

回答

3

它看起来像服务器使用的特定大小chunked encoding并且您不会获得内容长度。

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

谢谢 - 但为什么我看到卷曲的内容长度? – ligi

+0

我怀疑,因为okhttp自动通告gzip的支持,我得到与 卷曲德相同的行为'卷曲-i -H“接受编码:gzip” -s HTTP:// ipfs.io/IPF问题/ QmRMHb4Vhv8LtYqw8RkDgkdZYxJHfrfFeQaHbNUqJYmdF2' –

+0

感谢信息! – ligi