【发布时间】:2014-08-21 10:05:25
【问题描述】:
我想在不实际下载(大)文件的情况下获取远程连接上文件的文件大小。我正在使用文件的“Content-Length”标头。相关代码为:
URL obj = new URL(FILES_URL + fileName);
String contentLength = "";
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) obj.openConnection();
conn.setConnectTimeout(3000);
conn.setReadTimeout(3000);
contentLength = conn.getHeaderField("Content-Length");
int responseCode = conn.getResponseCode();
Log.d(TAG, "responseCode: " + responseCode);
} finally {
Log.d(TAG, "pre-disconnect");
if (conn!=null) conn.disconnect();
Log.d(TAG, "post-disconnect");
}
return contentLength;
命令“conn.disconnect();”有时似乎需要永远。我看过23秒!诚然,这是连接到运行 Web 服务器的辅助本地设备,但 WiFi 信号很强,速度相对较快,而且我从未在笔记本电脑上使用“curl”时遇到过任何此类问题。我也无法控制我正在连接的网络服务器。
当多个类似的连接一个接一个地连接到不同的文件时,这个问题可能会增强,不确定。然而,这是创建全新的HttpURLConnection,而不是重用旧的。重用连接有帮助吗?
我从不真正下载文件或访问输入流。
我不能直接调用disconnect,但我知道不建议这样做,因为资源不会被释放。这不正确吗?我注意到URLConnection 没有断开连接。只是建议关闭您打开的所有流。
此代码位于异步任务中。我想我可以尝试将断开连接调用本身移动到另一个异步任务,因为之后我什么都不做。不确定这是否可能。
你有什么建议吗?我应该尝试HttpURLConnection 以外的其他方法来获取文件大小而不下载文件吗?
【问题讨论】:
-
我建议你将请求方法更改为“HEAD”。否则,您可能正在阅读整个 GET 响应,即整个文件。
标签: java android httpurlconnection urlconnection