我必須下載一個文件,我正在使用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. 在不知道大小的情況下下載文件
- 3. Python | HTTP - 如何在下載之前檢查文件大小
- 4. 如何在下載之前獲取文件大小
- 5. 在通過HTTP下載文件之前獲取文件大小
- 6. 在android中下載文件之前獲取文件大小
- 7. 在下載多個文件之前檢查文件大小
- 8. 在知道文件大小之前,如何增加Azure文件存儲CloudFile的大小?
- 9. 如何在iOS 7中下載文件之前查找文件的大小?
- 10. 如何在調用SQLGetData之前知道數據的大小
- 11. 我需要知道大小的MP3歌曲在android下載之前
- 12. Python ftplib在下載之前無法獲取文件的大小?
- 13. 如何在導出之前知道視頻大小 - After Effects
- 14. PHP:如何知道用戶當前正在下載文件?
- 15. 如何在開始下載之前獲取遠程文件的大小?
- 16. 如何在下載之前檢查內存中的文件大小
- 17. 如何在下載之前設置imageView的大小
- 18. 下載前計算文件大小
- 19. Ajax - 下載前獲取文件大小
- 20. 下載前請求文件大小
- 21. 使用WinInet在下載文件之前確定總文件的大小
- 22. 使用python請求下載之前獲取mp4文件大小
- 23. 下載之前檢查文件大小C#
- 24. 如何在上傳文件之前檢索文件的大小?
- 25. 如何知道一個非常小的文件的大小?
- 26. Android下載的文件大小大於下載大小
- 27. 不知道文件名下載文件
- 28. 從網絡下載圖像文件之前獲取圖像文件的大小
- 29. HTTP在知道其大小之前發送請求內容(org.apache.http)
- 30. 如何在jQuery的幫助下在上傳之前找到文件的大小?
請注意,您應該在嘗試訪問Content-Length標頭之前調用'urlConnection.connect()'。不這樣做可能會起作用,但不是在所有可能的情況下。 – Felix 2010-06-06 15:47:00
不知道......它爲我工作,但謝謝你的建議。我要編輯答案。 – Cristian 2010-06-06 16:00:28