davincho: PERL Uploadscript

hi,

ich stehe vor folgendem problem:
derzeit will ich einen animierten statusbalken beim dateiupload implementieren. dabei verwende ich eine perlskript, dass mir nach etwa 1024 bytes eine rückmeldung und zwar mit

  
while(($dataRead = read $file,$data,1024) != 0) {  
  print DAT $data;  
  $dataTotal += $dataRead;  
  print $dataTotal . ', ';  
  $| = 1;  
}  

dabei lese ich die zu uploadende datei ein und gebe gleichzeitig die summe der bytes die bis jetzt gelesen wurden aus.
(anfangs wollte ich dies in eine externe datei schreiben, jedoch bin ich von dieser idee wieder abgekommen).
nun gut, diese dataTotal-Ausgabe, will ich dann im späteren verlauf mit js auslesen und die weite des animierten balken damit verändern.
das problem jedoch ist, dass der output nicht geflushed wird, sondern als gesamtpaket nach dem die datei upgeloaded wurde ausgegeben wird, was natürlich nicht erfreulich ist!

ich hoffe ich konnte mein problem verständlich schildern und freue mich auf vorschläge ;)
lg
davincho

  1. hi,

    ich hoffe ich konnte mein problem verständlich schildern und freue mich auf vorschläge ;)

    Es ist so: In Deiner while()-Schleife liest Du mit der read()-Funktion ein Handle aus. Da ist die Datei praktisch schon auf dem Server. Dein Wunsch nach einer "Rückmeldung" ist so nicht machbar.

    Natürlich könntest Du mit einem eigenen Useragent auch per HTTP eine Datei stückchenweise übertragen und bekämst so eine Rückmeldung in der Response, oder in mehreren Responsen alle 1024 byte.

    Normalo UserAgents wie FF, IE usw. schicken jedoch die Datei komplett zum Server, schon von daher bekommst Du eine Response erst, wenn alles übertragen wurde.

    Schöne Grüße,
    Horst Hitzig

  2. Bitte zuerst auf CPAN suchen und Doku lesen. Wie immer, sind alle banalen Problemstellungen schon mehrfach gelöst.

    http://p3rl.org/CGI#Progress_bars_for_file_uploads_and_avoiding_temp_files
    http://p3rl.org/CGI::ProgressBar