getContentLength () renvoie -1 uniquement en WiFi?

Je veux connaître la longueur du fichier, j’ai donc essayé getContentLength() . Cela fonctionne bien avec la connexion de réseau (edge ​​/ 3g) mais renvoie -1 avec le WiFi?
Pourquoi? Le WiFi est bon et le fichier a été trouvé, il peut être téléchargé mais le retour de getContentLength() est toujours “-1”. Je ne comprends pas. file est un fichier de documents Google.
Y a-t-il une autre façon d’obtenir la longueur?

Mon code est:

 URL url = new URL(file); URLConnection conexion = url.openConnection(); conexion.connect(); int poids = conexion.getContentLength(); 

Il se peut très bien que le réseau mobile change les choses pour vous. Par exemple, le réseau mobile que j’utilise réduit automatiquement (et de manière agaçante) les téléchargements d’images. Si le réseau exécute le téléchargement intégral de manière “transparente” avant de vous fournir des données, il peut compléter la longueur du contenu pour vous.

Cependant, vous ne devriez essentiellement pas compter sur la longueur du contenu … rien ne garantit qu’il sera disponible.

Le serveur renvoie probablement une réponse HTTP qui est fragmentée.

Le comportement de la méthode getContentLength () consiste à renvoyer la valeur «interne» de la longueur du contenu disponible. Lorsque le client reçoit une réponse HTTP fragmentée, la longueur de la réponse n’est pas connue et, par conséquent, la valeur de la longueur du contenu est marquée comme -1.

La nature fragmentée de la réponse peut être déterminée par la valeur de l’en Transfer-Encoding tête Transfer-Encoding ; les réponses fragmentées ont une valeur de fragmentation. Les serveurs HTTP n’ont pas besoin de fournir une valeur d’en Content-Length tête Content-Length si la réponse est envoyée via un codage fragmenté; En fait, les serveurs sont encouragés à ne pas envoyer l’en-tête Content-Length pour une réponse fragmentée, car le client est censé ignorer l’en-tête Content-Length.

En ce qui concerne la raison réelle pour laquelle le serveur réagit différemment dans deux réseaux, cela dépend de plusieurs facteurs. Habituellement, les serveurs opteront pour un mode de livraison plus optimal, en fonction de la nature du client. Pour une raison quelconque, il est préférable d’envoyer des réponses en bloc pour un type de connexion. La réponse pourrait se trouver dans les en-têtes de requête HTTP, mais pas nécessairement.