我必须下载一个文件,我正在使用this code,它基本上是一个AsyncTask
,它意在更新进度条。但是,因为我不知道文件大小是什么,我一直不得不使用微调器进度条。那么,如何在开始下载文件之前获取文件大小,以便我可以使用正常的进度条?如何在下载之前知道文件的大小?
回答
你可以得到一个名为Content-Length
的头文件,它构成你得到的HTTP Response对象,这会给你文件的长度。 尽管如此,你应该注意到,有些服务器不会返回这些信息,而知道实际大小的唯一方法是从响应中读取所有内容。
例子:
URL url = new URL("http://server.com/file.mp3");
URLConnection urlConnection = url.openConnection();
urlConnection.connect();
int file_size = urlConnection.getContentLength();
这可以在大多数情况下使用,但是如果文件太大,则不起作用。请参阅以下我的帖子以获取始终有效的解决方案:http://stackoverflow.com/a/12271781/878126 – 2013-09-17 12:18:56
对于Android 7及更高版本,您应该使用getContentLengthLong()而不是getContentLength()。在那里更喜欢使用Long.parseLong(urlConnection.getHeaderField(“content-length”)) – Sandeep 2017-08-10 13:48:26
通常可以使用getContentLength,但最好的办法是自己得到的长度(因为它可以绕过整的最大值)。
只是自己解析内容长度标题值。更好地解析它。
例如:
final URL uri=new URL(...);
URLConnection ucon;
try
{
ucon=uri.openConnection();
ucon.connect();
final String contentLengthStr=ucon.getHeaderField("content-length");
//...
}
catch(final IOException e1)
{
}
也请注意,我可以是任何字符串,所以使用try catch和如果是-1,空,或为空,这意味着你可以不知道的大小因为服务器不允许它。
Java的int原语是一个32位有符号整数;你可能不会超过最大值,实际上你可以使用Content-Type标头 – mjama 2013-03-29 05:07:27
,它大约是2GB。 – 2013-03-29 06:48:11
那么在服务器端要做些什么才能让.. ..? – 2014-03-01 09:01:12
- 1. 如何知道下载文件的大小在下载之前和之后android
- 2. Python | HTTP - 如何在下载之前检查文件大小
- 3. 在android中下载文件之前获取文件大小
- 4. 在通过HTTP下载文件之前获取文件大小
- 5. Python ftplib在下载之前无法获取文件的大小?
- 6. 如何在导出之前知道视频大小 - After Effects
- 7. PHP:如何知道用户当前正在下载文件?
- 8. 如何在下载之前检查内存中的文件大小
- 9. 如何在开始下载之前获取远程文件的大小?
- 10. 下载前计算文件大小
- 11. 使用WinInet在下载文件之前确定总文件的大小
- 12. 如何在上传文件之前检索文件的大小?
- 13. 不知道文件名下载文件
- 14. 如何在jQuery的帮助下在上传之前找到文件的大小?
- 15. 如何知道CSV下载?
- 16. 下载大量小文件
- 17. Jsp下载文件大小
- 18. 下载文件大小--JavaME
- 19. 如何在python中读取对象后知道文件大小?
- 20. 问题确定当前正在下载的文件大小?
- 21. 如何在POST数据之前找到文件的大小?
- 22. 如何在上传之前检测视频的文件大小?
- 23. 如何知道杂货店的文件大小?
- 24. 如何知道Linux内部文件的大小
- 25. C#如何知道网站上的文件大小
- 26. 如何在Ruby中知道文件是否完全下载
- 27. 如何获取多个文件下载的文件大小
- 28. delete []如何知道数组的大小?
- 29. 如何知道HCURSOR对象的大小
- 30. 在调整大小之前猜测gif文件大小
请注意,您应该在尝试访问Content-Length标头之前调用'urlConnection.connect()'。不这样做可能会起作用,但不是在所有可能的情况下。 – Felix 2010-06-06 15:47:00
不知道......它为我工作,但谢谢你的建议。我要编辑答案。 – Cristian 2010-06-06 16:00:28