Android通过HttpConnection获取文件长度
我正在尝试开发简单的android下载管理器,在这个库中,我通过两种方法从http连接获取文件长度,如下代码所示: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
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")) {
isfalse
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)
接受范围:字节标头<代码>接受范围
响应标头表示服务器具有范围标头支持
检查Chrome和johnstok解释的静态web服务器之间的请求-响应交换。我没有任何访问服务器的权限,此链接可以通过其他应用程序(如whatsApp或telegram)下载,没有任何问题,我想知道为什么此代码无法获取文件长度。你能帮我修复代码吗?由于我的办公室防火墙,我无法访问URL。我会尝试其他方法,让你知道。您是否检查了我在编辑中提到的Accept Ranges
的响应标题。