12
A
回答
22
使用HEAD请求,你可以做这样的事情:
private static int getFileSize(URL url) {
URLConnection conn = null;
try {
conn = url.openConnection();
if(conn instanceof HttpURLConnection) {
((HttpURLConnection)conn).setRequestMethod("HEAD");
}
conn.getInputStream();
return conn.getContentLength();
} catch (IOException e) {
throw new RuntimeException(e);
} finally {
if(conn instanceof HttpURLConnection) {
((HttpURLConnection)conn).disconnect();
}
}
}
6
尝试使用HTTP HEAD方法。它仅返回HTTP标头。标题Content-Length
应该包含您需要的信息。
2
您是否尝试过使用URL连接上的getContentLength? 如果服务器响应一个有效的头文件,你应该得到文件的大小。
但请注意,网络服务器也可能会以大块的形式返回文件。在这种情况下,IIRC内容长度方法将返回一个块的大小(< = 1.4)或-1(> 1.4)。
3
HTTP响应有一个Content-Length头,所以你可以查询此值的URLConnection对象。
一旦URL连接已经打开,你可以尝试这样的事:
List values = urlConnection.getHeaderFields().get("content-Length")
if (values != null && !values.isEmpty()) {
// getHeaderFields() returns a Map with key=(String) header
// name, value = List of String values for that header field.
// just use the first value here.
String sLength = (String) values.get(0);
if (sLength != null) {
//parse the length into an integer...
...
}
}
0
你可以试试这个..
private long getContentLength(HttpURLConnection conn) {
String transferEncoding = conn.getHeaderField("Transfer-Encoding");
if (transferEncoding == null || transferEncoding.equalsIgnoreCase("chunked")) {
return conn.getHeaderFieldInt("Content-Length", -1);
} else {
return -1;
}
3
接受的答案是容易NullPointerException
,不为文件> 2GiB工作,并包含对getInputStream()
的不必要的调用。这里的固定代码:
public long getFileSize(URL url) {
HttpURLConnection conn = null;
try {
conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("HEAD");
return conn.getContentLengthLong();
} catch (IOException e) {
return -1;
// Or wrap into a (custom, if desired) RuntimeException so exceptions are propagated.
// throw new RuntimeException(e);
// Alternatively you can just propagate IOException, but, urgh.
} finally {
if (conn != null) {
conn.disconnect();
}
}
}
相关问题
- 1. `find'如何计算文件的大小?
- 2. 如何计算音频文件大小?
- 3. 如何计算protobuf文件大小?
- 4. 计算shell中文件的大小
- 5. 如何从URL中的URL获取文件大小?
- 6. MongoDB如何计算文档的大小?
- 7. 在PostgreSQL中计算文件大小
- 8. 如何计算上传大文件的最佳块大小
- 9. 如何计算C#中的文件大小
- 10. 如何计算Android中文件的大小
- 11. 如何计算文件中区分大小写的独立字
- 12. 计算响应的文件大小?
- 13. 如何计算DB2中表的大小
- 14. 在java中计算S3对象(文件夹)大小
- 15. 在java中,如何计算最大数目减去较小数字的计算?
- 16. 如何在.NET中计算/确定文件夹大小?
- 17. 如何在matlab中计算jpeg2000文件头大小?
- 18. 从头文件计算linux核心文件大小
- 19. 如何从点大小计算qfont像素大小
- 20. 如何在C中计算您的计算机的字大小?
- 21. Java文本组件计算自己的首选大小
- 22. Python的`file.read`函数如何计算出文件的大小?
- 23. 计算文本大小
- 24. 如何计算文件夹的大小。 (这个大小必须与Finder一致。)
- 25. 下载前计算文件大小
- 26. 计算大小文件夹python
- 27. 计算文件大小(ASCII值)
- 28. 计算和缓存文件夹大小
- 29. 如何计算MP4文件(MPEG4,H.264)的每分钟大小?
- 30. 计算Java对象的字节大小
恐怕你将不得不下载文件至少一次以得到确切的大小。 (您可能希望将来存储,但如果服务器上的文件发生更改,数据将失效) – Nishant
@Nishant这是不正确的。 'HTTP HEAD'请求会返回有关您执行'HTTP GET'请求时会得到的信息的信息,该请求应包含返回请求的大小。你当然可以做'HEAD'请求并解析响应。 – Thor84no
啊,好的。很高兴知道。谢谢@ Thor84no – Nishant