connection.getContentLength()为负值
后台:PHP
客户端:Android。
下载apk的时候,需要更新下载进度。
但是connection.getContentLength()的值一直是-1,后台的人(做客户端的都知道呵呵。。)估计也没听懂,不在一个地方办公。
木有办法,只有先自己弄下,找度娘,到时看到个
类似的解决方案。
加上
connection.setRequestProperty("Accept-Encoding", "identity"); connection.connect();
试了试,不行,还是-1。
然后我去百度随便找了个图片,复制地址,查看了下connection.getContentLength()也是-1。的了,很可能是我程序的问题,找.......
偶然看到个网上资料回答里面,有个哥们,说,connection.getContentLength()只能在Post方式里面返回,get不返回,(不知道对错)
我就加了句代码:
connection.setRequestMethod("POST");
OK,百度的那个图片地址,connection.getContentLength()有值了。
然后我在用我们后台给的地址,还是不行,是-1.
那就是后台的问题了,需要设置,Content-Length。
1.但是后台只设置了Accept-Length,和Accept-Ranges
一个是文件长度,一个是文件长度的单位。
这里要说一下怎么取值。
easy (当初我是试了一会,才找出来的,⊙﹏⊙)
String b = connection.getHeaderField("Accept-Length"); int c = connection.getHeaderFieldInt("Accept-Length", 0);
ps:上面这2句2选1就行了,
这样就行了。
同样可以取到文件的长度。
前提条件:后台返回给你了,他设置了这几个属性,才行。
2.其实这个要说的前面已经提到了,直接让后台设置属性“Content-Length”
这样,客户端,取的时候,直接用connection.getContentLength()就可以了。
反正我用http://my.oschina.net/u/133352/blog/96582这哥们的,不行,花费了些时间,才解决这个问题,写下来,防止忘记和留给同样疑惑的朋友。
最后,贴一下正确的代码
package aaa.test; import java.net.HttpURLConnection; import java.net.URL; public class HttpUrlTest { public static void main(String[] args) { try { String downLoadUrl = "后台给的url"; // String downLoadUrl = // "http://image.baidu.com/i?ct=503316480&z=0&tn=baiduimagedetail&ipn=d&word=%E6%8F%90%E8%8E%AB&step_word=%E6%8F%90%E8%8E%AB&pn=115&spn=0&di=152269112710&rn=1&is=&istype=&ie=utf-8&oe=utf-8&in=5654&cl=2&lm=-1&st=&cs=804657554%2C2931287498&os=1811218947%2C3686935365&ln=1000&fr=&fmq=1410849622013_R&ic=&s=&se=&sme=0&tab=&width=&height=&face=&ist=&jit=&cg=&objurl=http%3A%2F%2Fimg4.5652.com%2F2012%2F12%2F8%2Fe09d67133a9194c36a2c9de018a9b1dc.jpg&fromurl=ippr_z2C%24qAzdH3FAzdH3Fs5s_z%26e3Bcmcd_z%26e3Bv54AzdH3FgjofAzdH3Fs5sAzdH3F8nb8na_z%26e3Bip4s"; URL url = new URL(downLoadUrl); // 打开连接 HttpURLConnection connection = (HttpURLConnection) url.openConnection(); connection.setRequestMethod("POST"); connection.setRequestProperty("Accept-Encoding", "identity"); connection.connect(); long a = connection.getContentLengthLong(); String b = connection.getHeaderField("Accept-Length"); int c = connection.getHeaderFieldInt("Accept-Length", 0); // 文件总大小 double fileSize = connection.getContentLength(); System.out.println("fileSize====" + fileSize); System.out.println("a====" + a); System.out.println("b====" + b); System.out.println("c====" + c); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。