qbcafe: Datei-Upload und Dateigröße

Wie kann ich die Dateigröße vor dem Upload ermitteln ?

  1. Wie kann ich die Dateigröße vor dem Upload ermitteln ?

    Soweit ich weiß gar nicht!

    greets
    myMojito

    1. moin,

      Wie kann ich die Dateigröße vor dem Upload ermitteln ?

      Soweit ich weiß gar nicht!

      Yes it is.

      Aber _während_ dem Upload gehts:

      http://i-netlab.de/downloads/upload.shtml

      ...indem du den Rückgabewert der read() funktion aufsummierst und damit den Verlauf des Scripts bestimmst.

      Rolf

      1. Yes it is.

        Aber _während_ dem Upload gehts:

        http://i-netlab.de/downloads/upload.shtml

        ...indem du den Rückgabewert der read() funktion aufsummierst und damit den Verlauf des Scripts bestimmst.

        Hallo Rolf, schon wach ;-)

        ist zu dem Zeitpunkt, an dem dein Skript eingreift, der Upload theoretisch abgeschlossen? Du kontrollierst nur die Dateigröße zu dem Zeitpunkt, an dem Du die temporäre Upload-Datei kopierts. Dann habe ich aber eventuell schon 10MB auf den Server hochgeladen und werte vor meinem Browser... und warte... und warte ;-)

        Im Formular kann man beim Upload-Feld das Attribut maxlength angeben. Aber meines Wissens ist das nicht sehr zuverlässig.

        greets
        myMojito

        1. moin ;-)

          Hallo Rolf, schon wach ;-)

          logo, ich stehe gerne früh auf, trinke noch einen Tee bevor ich nach KA fahre und ziehe die frische Morgenluft auf der Terasse ein ...

          ist zu dem Zeitpunkt, an dem dein Skript eingreift, der Upload theoretisch abgeschlossen? Du kontrollierst nur die Dateigröße zu dem Zeitpunkt, an dem Du die temporäre Upload-Datei kopierts. Dann habe ich aber eventuell schon 10MB auf den Server hochgeladen und werte vor meinem Browser... und warte... und warte ;-)

          Nein, wenn das im (meinem) CGI vorgegebene Limit erreicht ist sieht der Client sofort eine entsprechende Meldung. Du musst in einem solchen Script jedoch dafür sorgen dass etwaige Dateifragmente die bereits auf den Server geschrieben wurden entfernt werden.

          =

          Damit kann die Gesamtgroesse des Uploads bestimmt werden

          open (OUTFILE,">$dir/$remote_filename") || err("Fehler bei Hochladen","$dir/$remote_filename");
           binmode OUTFILE;
           while ($bytesread = read($filename, $buffer, 1024)) {
            $sum += $bytesread;
            if( $sum > $max){
             close OUTFILE;
             unlink "$dir/$remote_filename";
             err("Das Upload Limit ist erreicht","Abbruch...");
            }
            print OUTFILE $buffer;
           }
           close OUTFILE;
          =cut

          Die err() funktion macht also das unlink() und bricht dann erst ab mit einer entsprechenden Meldung an den Browser.

          Im Formular kann man beim Upload-Feld das Attribut maxlength angeben. Aber meines Wissens ist das nicht sehr zuverlässig.

          Richtig. Besser ists also eine eigene Funktion dafür zu haben - nämlich im CGI selbst.

          Andere Möglichkeiten bietet CGI Modul auch selbst:

          http://i-netlab.de/links/cgi.htm#Avoiding_Denial_of_Service_Attac
          zb mit $CGI::POST_MAX

          Ist diese Var gesetzt führt das zu einem *fatalen Browser Fehler* und da dieser mit (fatalsToBrowser) für den Benutzer nicht immer so ganz verständlich ist bevorzuge ich da eine eigene Abbruchfunktion.

          Morgengruß, Rolf

  2. Wie kann ich die Dateigröße vor dem Upload ermitteln ?

    Hi,

    "my @Product_Picture_FileInfo = stat($cgi->param(Product_Picture));
    @Product_Picture_FileInfo[7] > $Def_Max_Uploadable_FileSize)"
    (Auszug aus von mir produtziertem Code-Muell)

    Also erst mal ein @Array mithilfe der Funktion stat() fuellen und dann das achte Element des Arrays auswerten.

    Gruss,
    Lude