Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android通过HttpConnection获取文件长度_Android_Httpconnection - Fatal编程技术网

Android通过HttpConnection获取文件长度

Android通过HttpConnection获取文件长度,android,httpconnection,Android,Httpconnection,我正在尝试开发简单的android下载管理器,在这个库中,我通过两种方法从http连接获取文件长度,如下代码所示: String contentLength = httpConnection.getHeaderField("Content-Length"); if (TextUtils.isEmpty(contentLength) || contentLength.equals("0") || contentLength.equals("-1")) { length = httpConn

我正在尝试开发简单的android下载管理器,在这个库中,我通过两种方法从http连接获取文件长度,如下代码所示:

String contentLength = httpConnection.getHeaderField("Content-Length");
if (TextUtils.isEmpty(contentLength) || contentLength.equals("0") || contentLength.equals("-1")) {
    length = httpConnection.getContentLength();
} else {
    length = Long.parseLong(contentLength);
}
当我打开
206
时,此代码工作正常

httpConnection.getResponseCode();
但是当我得到
200

if (TextUtils.isEmpty(contentLength) || contentLength.equals("0") || contentLength.equals("-1")) {
is
false

httpConnection.getContentLength();
返回
0

完整填写我的代码的这一部分:

try {
    httpConnection = (HttpURLConnection) url.openConnection();
    httpConnection.setConnectTimeout(Constants.HTTP.CONNECT_TIME_OUT);
    httpConnection.setReadTimeout(Constants.HTTP.READ_TIME_OUT);
    httpConnection.setRequestMethod(Constants.HTTP.GET);
    httpConnection.setRequestProperty("Range", "bytes=" + 0 + "-");
    final int responseCode = httpConnection.getResponseCode();
    if (responseCode == HttpURLConnection.HTTP_OK) {
        parseResponse(httpConnection, false);
    } else if (responseCode == HttpURLConnection.HTTP_PARTIAL) {
        parseResponse(httpConnection, true);
    } else {
        throw new DownloadException(DownloadStatus.STATUS_FAILED, "UnSupported response code:" + responseCode);
    }
} catch (ProtocolException e) {
    throw new DownloadException(DownloadStatus.STATUS_FAILED, "Protocol error", e);
} catch (IOException e) {
    throw new DownloadException(DownloadStatus.STATUS_FAILED, "IO error", e);
} finally {
    if (httpConnection != null) {
        httpConnection.disconnect();
    }
}
这是我下载和获取文件长度的测试链接

http://wallpaperwarrior.com/wp-content/uploads/2016/09/Wallpaper-16.jpg

当您获得200(正常)而不是206(部分 内容),您的范围检索请求未得到满足

来自W3文档:

  • 无条件GET中存在范围标头会修改 如果GET以其他方式成功,则返回什么。换句话说 换句话说,响应带有206(部分)的状态代码 内容)而不是200(OK)
更多详情:

您必须检查服务器端日志以了解其失败的原因

编辑1 当您获得200(确定)时,检查响应标头中的
接受范围:字节
标头<代码>接受范围
响应标头表示服务器具有范围标头支持


检查Chrome和johnstok解释的静态web服务器之间的请求-响应交换。

我没有任何访问服务器的权限,此链接可以通过其他应用程序(如whatsApp或telegram)下载,没有任何问题,我想知道为什么此代码无法获取文件长度。你能帮我修复代码吗?由于我的办公室防火墙,我无法访问URL。我会尝试其他方法,让你知道。您是否检查了我在编辑中提到的
Accept Ranges
的响应标题。