Ich muss eine Datei herunterladen und ich verwende this code, die im Grunde eine AsyncTask
ist, die eine Fortschrittsanzeige aktualisieren soll. Aber da ich nicht weiß, wie groß die Datei ist, musste ich den Fortschrittsbalken des Spinner verwenden. Also, wie bekomme ich die Dateigröße, bevor ich sie herunterlade, damit ich einen normalen Fortschrittsbalken benutzen kann?Wie kann man die Größe einer Datei vor dem Herunterladen erkennen?
Antwort
Sie können eine Kopfzeile mit dem Namen Content-Length
Form des HTTP-Response-Objekts erhalten, die Sie erhalten, wird Ihnen die Länge der Datei geben. Sie sollten jedoch beachten, dass einige Server diese Informationen nicht zurückgeben, und die einzige Möglichkeit, die tatsächliche Größe kennen, ist alles aus der Antwort zu lesen.
Beispiel:
URL url = new URL("http://server.com/file.mp3");
URLConnection urlConnection = url.openConnection();
urlConnection.connect();
int file_size = urlConnection.getContentLength();
Dies funktioniert in den meisten Fällen, aber wenn die Datei zu groß ist, wird es nicht funktionieren. Siehe meinen Beitrag unten für eine Lösung, die immer funktioniert: http://stackoverflow.com/a/12271781/878126 –
Sie sollten getContentLengthLong() anstelle von getContentLength() für Android 7 und höher verwenden. Darunter bevorzugen Sie die Verwendung von Long.parseLong (urlConnection.getHeaderField ("content-length")) – Sandeep
können Sie in der Regel getContentLength verwenden, aber das Beste, was es ist, die Länge von sich selbst zu erhalten (da es ganze Zahl von Maximalwert umgehen kann).
Parsen Sie einfach den Content-Length-Header-Wert selbst. besser parse es so lange.
Beispiel:
final URL uri=new URL(...);
URLConnection ucon;
try
{
ucon=uri.openConnection();
ucon.connect();
final String contentLengthStr=ucon.getHeaderField("content-length");
//...
}
catch(final IOException e1)
{
}
Sie beachten Sie, dass ich eine beliebige Zeichenfolge sein kann, so versuchen Sie fangen verwenden, und wenn es -1, leer oder null, es bedeutet, dass Sie nicht die Größe der wissen kann, Datei, da der Server es nicht erlaubt.
Java-Int-Primitive ist eine 32-Bit-Ganzzahl mit Vorzeichen; Sie werden wahrscheinlich nicht den Maximalwert mit einem Content-Type-Header – mjama
tatsächlich überschreiten können, es ist etwa 2 GB. –
Also, was auf der Serverseite zu tun, um es zu ermöglichen ..? –
- 1. Größe der Bilddatei vor dem Herunterladen aus dem Internet herunterladen
- 2. Wie kann die Website-Ressource vor dem Herunterladen geschützt werden?
- 3. Ajax - Get Größe der Datei vor dem Download
- 4. Wie kann ich den Canvas-Hintergrund vor dem Herunterladen festlegen?
- 5. Wie kann man curl informieren, die Datei vor dem Download zu überprüfen?
- 6. Java URLConnection: Wie kann ich die Größe einer Webdatei herausfinden?
- 7. Kann das iPhone die Größe einer Berührung erkennen?
- 8. Wie pausiert man die Verzögerung einer Komponente vor dem Zustandsübergang?
- 9. Wie kann man die Zeilennummer erkennen, die einer Pufferposition entspricht?
- 10. Wie bekomme ich die Größe einer Remote-Datei mit dem iPhone SDK?
- 11. R Wie schätzen Sie die Größe der csv-Datei vor dem Schreiben auf die Festplatte ein?
- 12. Python ftplib kann die Größe der Datei vor dem Download nicht bekommen?
- 13. Wie kann man eine Datei vom Server mit smartgwt herunterladen?
- 14. Vermeiden Sie System.Runtime.InteropServices.COMException durch Erkennen eines Systemordners vor dem Schreiben einer Datei
- 15. Erhalten Sie die Größe eines Docker-Bildes vor dem Ziehen?
- 16. Wie kann man die Größe einer Verbindung erhöhen?
- 17. Entpacken einer Datei vor dem Speichern auf die Festplatte
- 18. asp.net Datei herunterladen - Track heruntergeladen Größe
- 19. Wie groß ist die typische Größe einer .dwg-Datei?
- 20. Ausblenden einer Zeichenfolge in einer Datei vor dem Git-Commit
- 21. Wie kann man die Größe einer Tabelle begrenzen?
- 22. Größe Bild vor dem Hochladen ändern Javascript
- 23. Wie erhält man die sichtbare Größe einer Aktivität?
- 24. Wie kann man die Größe gültiger Elemente erkennen, auf die Zeiger zeigen?
- 25. Wie finde ich die URL zum Herunterladen einer Datei?
- 26. Wie man eine Datei von einer URL mit Javascript herunterladen?
- 27. Wie kann man mit Scala eine Datei aus dem Internet herunterladen und speichern?
- 28. Wie kann ich die über mein Fenster gezogene Datei erkennen?
- 29. Größe der Ansichten vor dem Zeichnen
- 30. Größe Bild vor dem Laden - jquery
Beachten Sie, dass Sie 'urlConnection.connect()' aufrufen sollten, bevor Sie versuchen, auf den 'Content-Length'-Header zuzugreifen. Das könnte nicht funktionieren, aber nicht unter allen möglichen Umständen. – Felix
Wusste nicht, dass ... es so für mich funktioniert hat, aber danke für deinen Rat. Ich werde die Antwort bearbeiten. – Cristian