Comment connaître la taille d'un fichier avant de le télécharger?

Je dois télécharger un fichier et j'utilise CE code , qui est fondamentalement un AsyncTask qui est destiné à mettre à jour une barre de progression. Mais, puisque je ne sais pas quelle est la taille du fichier, j'ai dû utiliser la barre de progression du spinner. Alors, comment puis-je obtenir la taille du fichier avant de commencer à le télécharger afin que je puisse utiliser une barre de progression normale?

31
demandé sur Cristian 2010-06-06 08:15:42

2 réponses

Vous pouvez obtenir un en-tête appelé Content-Length form l'objet de réponse HTTP que vous obtenez, cela vous donnera la longueur du fichier. vous devriez noter cependant, que certains serveurs ne renvoient pas cette information, et la seule façon de connaître la taille réelle est de tout lire de la réponse.

Exemple:

URL url = new URL("http://server.com/file.mp3");
URLConnection urlConnection = url.openConnection();
urlConnection.connect();
int file_size = urlConnection.getContentLength();
72
répondu reflog 2010-07-18 04:48:00

Vous pouvez généralement utiliser getContentLength , mais la meilleure chose est d'obtenir la longueur par vous-même (car il peut contourner la valeur maximale de l'entier).

Analysez simplement la valeur de l'en-tête content-length par vous-même . mieux l'analyser aussi longtemps .

Exemple:

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

Notez que je peux être n'importe quelle chaîne , alors utilisez try catch , et si c'est -1, vide ou null , cela signifie que vous ne pouvez pas connaître la taille du fichier puisque le serveur ne le permet pas.

17
répondu android developer 2012-09-04 21:45:22