后台: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();
}
}
}