Android Http ContentLength总是-1

时间:2014-09-05 08:56:56

标签: java android http content-length

我需要一种方法来确定Internet上文件的大小。这是我的方法:

    private int getSize(String url){
    try {
        HttpURLConnection connection = (HttpURLConnection) new URL(url).openConnection();
        //connection.setConnectTimeout(TIMEOUT);
        //connection.setReadTimeout(TIMEOUT);
        //connection.setRequestMethod("HEAD");
        int responseCode = connection.getResponseCode();
        int size = connection.getContentLength();

        if(responseCode != 200){
            Log.e(LOG_TAG, "Fehlercode: " + responseCode + " beim Ermitteln der Dateigroesse von " + url);
            return -1;
        }

        return size;            
    } catch (IOException e) {
        Log.e(LOG_TAG, "Fehler beim Ermitteln der Dateigroesse von " + url, e);
        return -1;
    }
}

使用Java(桌面)方法可行 - 在Android上它不起作用。 那有什么不对?

感谢您的帮助!

1 个答案:

答案 0 :(得分:2)

使用“gzip”压缩的HttpURLConnection和服务交互(android2.2及更高版本) 你应该设置:

connection.setRequestProperty("Accept-Encoding", "identity");

参考api: 默认情况下,HttpURLConnection的此实现请求服务器使用gzip压缩。由于getContentLength()返回传输的字节数,因此您无法使用该方法来预测可从getInputStream()读取的字节数。相反,读取该流直到它耗尽:whenread()返回-1。