HTTP下載文件時getContentLength()返回-1

      最近在Android上用HTTP下載文件,其中會獲取文件大小
        
     HttpURLConnection conn = (HttpURLConnection)url.openConnection();
     long contentlength = conn.getContentLength();


       發現在下載文件較小的時候能夠獲取到正確的contentlength值,一旦下載文件超過2G大小contentlength的值就是-1,在網上找相關解答,都是說要取消gzip文件壓縮方式,用conn.setRequestProperty("Accept-Encoding", "identity");修改,但是本人試過後還是不能得到大文件的contentlength值,後來無意間看到getContentLength方法的描述,發現該方法返回的是int類型的值,這才恍然大悟,超過2G的值是不能用int表示的,所以只會返回-1

       可用的解決辦法如下:

	private long getContentSize(HttpURLConnection conn){
		long contentSize = 0;
		for(int i = 0; ; i++){
			String mine = conn.getHeaderFieldKey(i);
			if(mine == null)
			{
				break;
			}
			else if(mine.equals("Content-Length"))
			{
				contentSize = Long.parseLong(conn.getHeaderField(i));
				break;
			}	
		}
		return contentSize;
	}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章