Upload Progress ermitteln (Jakarta HTTPClient)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Moin Benny,
    nach was googlest du denn.. erster Treffer: [google]Jakarta http progress upload[/google]

    java-forum.org/de/viewtopic.php?t=52607

    Da ich einen MultiPart-Post anstrebe (weil ich mehrere Files zugleich uploaden will), habe ich die Methode sendData(OutputStream) der Klasse org.apache.commons.httpclient.methods.multipart.FilePart um die Benachrichtigung eines ProgressListeners erweitert:
    P.S.: Der ProgressListener ist ein frei erfundenes Interface, das bei der Instantiierung meiner FilePart-Klasse mitgegeben wird.

    Quellcode

    1. protected void sendData(OutputStream out) throws IOException {
    2. [...]
    3. byte[] tmp = new byte[4096];
    4. InputStream instream = getSource().createInputStream();
    5. try
    6. {
    7. int len;
    8. while ((len = instream.read(tmp)) >= 0)
    9. {
    10. out.write(tmp, 0, len);
    11. if (progressListener != null)
    12. progressListener.bytesWritten((double)len / 1000.00); // weil meine Implementierung des Listeners in KB arbeitet
    13. }
    14. }
    15. finally
    16. {
    17. // we're done with the stream, close it
    18. instream.close();
    19. }
    20. }
    Alles anzeigen


  • Also mir würde in BennyBunnys Situation der Codeausschnitt nicht weiterhelfen.
    Ich denke das Problem liegt darin, die Größe der Daten des Streams zu ermitteln. Das Zählen der verarbeiteten Daten und das Berechnen des Fortschritts ist eigentlich Pillepalle.
    Also zurück zur Streamgröße. Ich würde mal behaupten ein Stream hat keine begrenzte Größe. Er kann damit potentiell unendlich sein. Damit lässt sich der Fortschritt mit dem Stream nicht berechnen. Nun würde ich 2 Alternativen vorschlagen. Wenn es immer um Dateien geht, dann versuche mal die Größe über die Klasse java.io.File und die Methode length() zu ermitteln. Ansonsten kannst du auch den Stream komplett in den Speicher laden und dabei die Gesammtgröße ermitteln. Das ist allerdings nur bei kleineren Datenmengen zu empfehlen.