下载之前如何知道文件的大小?

我必须下载一个文件,我使用这个代码 ,它基本上是一个AsyncTask ,用来更新进度条。 但是,因为我不知道什么是文件大小,我一直不得不使用微调进度条。 那么,如何才能在开始下载文件之前获取文件大小,以便使用正常的进度条?

你可以从你得到的HTTP Response对象中获得一个名为Content-Length的头文件,这会给你文件的长度。 你应该注意到,有些服务器不会返回这些信息,而唯一知道实际大小的方法是从响应中读取所有信息。

例:

 URL url = new URL("http://server.com/file.mp3"); URLConnection urlConnection = url.openConnection(); urlConnection.connect(); int file_size = urlConnection.getContentLength(); 

你通常可以使用getContentLength ,但最好的办法是自己获取长度(因为它可以绕过整数的最大值)。

只是自己parsing内容长度标题值。 更好地parsing它。

例:

 final URL uri=new URL(...); URLConnection ucon; try { ucon=uri.openConnection(); ucon.connect(); final String contentLengthStr=ucon.getHeaderField("content-length"); //... } catch(final IOException e1) { } 

请注意我可以是任何string,所以使用try catch,如果它是-1,空或null,这意味着你不知道文件的大小,因为服务器不允许它。