Anzeige:
Ergebnis 1 bis 4 von 4

Thema: mit Java per http Datei hochladen mit Progress

  1. #1
    Registrierter Benutzer Avatar von yankee42
    Registriert seit
    15.04.2005
    Beiträge
    41

    mit Java per http Datei hochladen mit Progress

    Hi @ll,

    ich verzweifele gerade daran von meinem java-Programm eine Datei an php zu übergeben...
    Da der Upload recht lange dauern kann, würde ich gerne einen Fortschrittsbalken einbauen, aber wie?

    Ich verwende zum Upload momentan diesen Code:
    http://forum.java.sun.com/thread.jsp...hreadID=451245

    Das Problem ist, dass die Daten erst wirklich versendet werden, wenn ich den inputstream öffne:
    BufferedReader in = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));

    Durch google habe ich erfahren, dass das bei http nunmal so ist, dass die Daten erst gesendet werden können, wenn man eine Verbindung zum lesen aufmacht. Allerdings kann ich die Leseverbindung auch nicht aufmachen, bevor ich mir dem http-request fertig bin :-(.
    Wie kann ich dann noch an den Übertragungsfortschritt kommen...?

  2. #2
    Registrierter Benutzer
    Registriert seit
    07.08.2006
    Beiträge
    101
    Auf die Schnelle könnte ich dir ein Workaround vorschlagen. Wenn du die Methode public void writeFile(String name, String mimeType, String fileName, InputStream is) aus MultipartFormOutpuStream verwendest, kannst du einen ProgressMonitorInputStream einhängen. Das sollte dein Problem lösen, da die Daten in o.g. Methode immer in 1kB-Blöcken gelesen und dann rausgeschrieben werden. Mit dieser Lösung hättest du also bei deiner Fortschrittsanzeige eine Abweichung um die Zeit, die zum Übertragen von 1kB (+ vielleicht etwas Footprint) benötigt wird.
    Geändert von falke2203 (13-09-2006 um 06:45 Uhr) Grund: Typos

  3. #3
    Registrierter Benutzer Avatar von yankee42
    Registriert seit
    15.04.2005
    Beiträge
    41
    Soweit ich das sehe hilft mir das nicht weiter...
    Damit könnte ich zwar auslesen, wieviel von der Datei die verschickt werden soll bis jetzt gelesen wurde und in den outputstream out geschrieben wurde...
    Aber das geht ja eh so schnell, dass man es garicht mitbekäme.
    Denn alles, was ich in out schreibe wird zunächst mal nur irgendwo gebuffert und erst abgeschickt, wenn ich den inputstream öffne...

    Oder habe ich dich falsch verstanden...?

  4. #4
    Registrierter Benutzer
    Registriert seit
    07.08.2006
    Beiträge
    101
    So wie ich das hier:
    Code:
    while((r = is.read(data, 0, data.length)) != -1) {
       out.write(data, 0, r);
    }
    interpretiere, werden immer 1 KB große Blöcke der Datei gelesen und direkt in den OutputStream geschrieben. Eine gewisse Varianz könnte sich natürlich durch die Größe des OutputStream-Puffers ergeben, die dürfte aber überschaubar sein und, gerade bei großen Dateien, nicht sonderlich ins Gewicht fallen.

    Am einfachsten probierst du es einfach mal aus, indem du den Ausdruck
    Code:
    ... = new FileInputStream(...);
    in deinem Code (der Parameter für die write-Methode in MultipartFormOutputStream) durch
    Code:
    ... = new ProgressMonitorInputStream(new FileInputStream(...));
    ersetzt.

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •