android下载文件,文件总长度getContentLength返回-1

本文探讨了在HTTP请求中getContentLength()返回-1的原因及解决方案,尤其是在服务器使用gzip压缩时。通过调整服务器的压缩方式,可以避免此问题,确保数据传输的准确预测。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先查询是不是后台传输数据的时候出现的问题

查看服务器响应头文件属性,确实没有这个属性了。。。所以返回为-1

1.1Content Length 在头文件中没有描述,暂时还没有解决方案

1.2Content Long在头文件中有描述,查询客户端调用产生的问题

2.调用时让服务器不要gzip方式压缩:

Java Doc 有对此的描述:

By default, this implementation of HttpURLConnection requests that servers use gzip compression. Since getContentLength() returns the number of bytes transmitted, you cannot use that method to predict how many bytes can be read from getInputStream(). Instead, read that stream until it is exhausted: whenread() returns -1. 
 
conn.setRequestProperty("Accept-Encoding", "identity");

大致意思是:

默认情况下,服务器使用gzip压缩的HttpURLConnection请求的实现。由于getContentLength()返回传输的字节数,因此不能使用该方法预测可以从getInputStream()读取多少字节。相反,读取该流直到它被耗尽:whenread()返回-1。

如采用okhttp可以在request中添加header

new Request.Builder().get().addheader("Accept-Encoding","identity"); 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值