2 huntcode HuntCode 于 2015.07.22 17:22 提问

getcontentlength返回值小文件是正常的,但是大文件就返回-1

最近在Android上用HTTP下载文件,使用HttpURLConnection创建连接,但是在获取文件大小的时候
HttpURLConnection conn = (HttpURLConnection)url.openConnection();
long contentlength = conn.getContentLength();

contentlength在下载小文件比如几十兆的文件时,得到了正常值,但是在下载大文件比如2G文件时,得到的是-1,请高手解答下

4个回答

Arnold9009
Arnold9009   2015.07.22 17:26

抓包看一下吧
估计小文件的大小是在头里的长度字段有值,所以能获取到
大文件的时候,长度字段没有了,而是使用了trunk的方式传输,这样就没办法直接获取到了,需要根据trunk信息进行统计

HuntCode
HuntCode 感谢回答,不过我自己研究明白了,getContentLength()返回的是int类型,最大支持2G,超过2G返回-1
2 年多之前 回复
danielinbiti
danielinbiti   Ds   Rxr 2015.07.22 17:31

大于2G估计服务器压缩传输了
设置conn .setRequestProperty("Accept-Encoding", "identity"); 试试

qq_21273163
qq_21273163 回复xyqsh: 能不能传授一下解决方法
大约 2 年之前 回复
danielinbiti
danielinbiti 回复xiyuqishi: 找到问题,解决问题了就是好事
2 年多之前 回复
HuntCode
HuntCode 感谢回答,不过我自己研究明白了,getContentLength()返回的是int类型,最大支持2G,超过2G返回-1
2 年多之前 回复
oyljerry
oyljerry   Ds   Rxr 2015.07.22 17:35

文件还可能是用的chunk方式传输的,它是按块传递的数据,对于大文件一般很难预测大小,都会这么传输
http://www.cnblogs.com/huangfox/archive/2012/03/31/2426346.html

HuntCode
HuntCode 感谢回答,不过我自己研究明白了,getContentLength()返回的是int类型,最大支持2G,超过2G返回-1
2 年多之前 回复
u012975705
u012975705   2015.07.22 20:38

哦哦 我在遇到了,纠结了半天 好人呐

Csdn user default icon
上传中...
上传图片
插入图片