getContentLength()仅在WiFi返回-1?

我想知道文件的长度,所以我试着getContentLength() 。 它工作正常与networking连接(边缘/ 3G),但返回-1 WiFi?
为什么? WiFi是好的,文件被find,它可以下载,但getContentLength()的返回总是“-1”。 我不明白。 file是一个谷歌文档文件。
有没有其他的方法来获得长度?

我的代码是:

 URL url = new URL(file); URLConnection conexion = url.openConnection(); conexion.connect(); int poids = conexion.getContentLength(); 

移动网络可能会改变你的事情。 例如,我使用的移动网络自动缩小图像下载(和烦人)。 如果网络在提供任何数据之前“透明地”执行完整下载,则可以为您填写内容长度。

然而,你基本上不应该依赖于内容的长度…没有什么可以保证它可以提供给你。

服务器可能发回一个分块的HTTP响应。

getContentLength()方法的行为是返回可用的内容长度的“内部”值。 当客户端收到HTTP分块响应时,响应的长度是未知的,因此内容长度值被标记为-1。

响应的分块性质可以由Transfer-Encoding头部值确定; 分块的响应具有分块的价值。 如果通过分块编码发送响应,则HTTP服务器不需要提供Content-Length标头值; 实际上,我们鼓励服务器不要为分块响应发送Content-Length头,因为客户端应该忽略Content-Length头。

至于为什么服务器在两个网络中有不同的响应的实际原因,这取决于各种因素。 通常,服务器将根据客户端的性质选择更优化的传送模式。 出于某种原因,它已经检测到最好是为一种连接类型发送分块响应。 答案可能在于HTTP请求标题,但不一定如此。