我想知道文件的长度,所以我尝试了getContentLength()
。它可以正常使用网络连接(edge / 3g)但是使用WiFi返回-1?
为什么? WiFi很好,找到了文件,可以下载,但getContentLength()
的返回始终为“-1”。我不明白file
是一个google文档文件
还有其他方法可以获得长度吗?
我的代码是:
URL url = new URL(file);
URLConnection conexion = url.openConnection();
conexion.connect();
int poids = conexion.getContentLength();
答案 0 :(得分:1)
移动网络很可能会为您改变一切。例如,我使用的移动网络自动缩小图像下载(并且令人讨厌)。如果网络在向您提供任何数据之前“透明地”执行完整下载,则可以为您填写内容长度。
但是,你基本上不应该依赖于内容长度...没有什么可以保证你可以使用它。
答案 1 :(得分:1)
服务器可能正在发回一个已分块的HTTP响应。
getContentLength()方法的行为是返回可用的内容长度的“内部”值。当客户端收到HTTP分块响应时,响应的长度未知,因此内容长度值标记为-1。
响应的分块性质可以由Transfer-Encoding
标头值确定;分块响应具有分块值。如果响应是通过分块编码发送的,HTTP服务器不需要提供Content-Length
标头值;实际上,鼓励服务器不为分块响应发送Content-Length头,因为客户端应该忽略Content-Length头。
至于服务器在两个网络中响应不同的实际原因,这取决于各种因素。通常,服务器会选择更优化的交付模式,具体取决于客户端的性质。出于某种原因,它已经检测到最好为一种类型的连接发送分块响应。答案可能在于HTTP请求标头,但不一定如此。