[Erledigt] Upload-Problem

So, jetzt noch eine etwas schwere Frage …

Die folgende Funktion wird in einer Upload-Klasse benutzt.
Diese Upload Klasse setzt per POST (an ein php Script) Daten ab.

Der User soll beim Upload (gewöhnlich Files mit der Größe von 2 bis 2,7 MB) anhand eines netten Ladebalkens sehen, wie lange es noch dauert.

Die Funktion errechnet, wieviel Prozente gemacht wurden und soll es später dann anzeigen.

Leider geht der Upload “viel zu schnell” - das Ding hat schon 100 % innerhalb weniger Sekunden (obwohl 2,6 MB) und die Verbindung ist dennoch aktiv!

Der Code:

        byte[] buf = new byte[5000];
        int nread;
        int navailable;
        int total = 0; //Menge an Bytes bisher gesendet
        int percentage = 0; //Percent done...
        int oldpercent = 0;
   
        
                
      synchronized (in) {
          while((nread = in.read(buf, 0, buf.length)) >= 0) {
                //Transfer
                out.flush();
                out.write(buf, 0, nread);
                out.flush();
              
            total += nread; //Wieviel bereits gesendet?
            percentage = (int)( ( total * 100.0 ) / filesize );
            //System.out.println("STAT_  sent: "+total+" total: "+filesize); 
            
            if(oldpercent < percentage){
                System.out.println("%: " + percentage); 
                 //listener.setProgressStatus(percentage);

            }

                oldpercent = percentage;

          }
       }        
        buf = null;
    }```

Du kannst davon ausgehen, dass die Variablen alle stimmen! (getestet)

Nur geht es viel zu schnell.
Der OutputStream schluckt anscheinend die Bytes alle irgendwo. :(

An diesem Problem sitze ich schon seit Wochen! :(

MfG
Inno

sieh mal nach was du für einen Outputstream hast, wenn es ein BufferedOutputStream ist puffert er es zwischen. Aber eigentlich sollte das flush ja alles abschicken

        if (os == null)connection.setUseCaches(false); os = connection.getOutputStream();
    }```

An dieser Stelle wird der OutputStream erzeugt (der in der pipe()-Funktion ja benutzt wird)
Könnte es dass sein?
URLconnection kann doch auch einen Cache besitzen?
setUseCaches(false); bringt hier aber nix (wahrscheinlich nur für den Download geeignet)


Danke Dir!
MfG
**Inno**

mach einfach mal System.out.println(os) dann siehste den Klassennamen des Streams

Hmm, scheint alles zu stimmen.

Das scheint ein ungelöstes Rätsel zu sein … :wink:

MfG
Inno