Reiner: Dateigröße vor Upload ermitteln

Hallo,

ich weiß, wir hatten das Thema schon mal! :-)
Aber was mich an dem Upload per CGI interessieren würde, wäre eine Möglichkeit, VOR dem Upload die Dateigröße ermitteln zu können. Ist es bisher nicht so, daß ich den ganzen Datenstrom erfassen muß, um dann zu sagen: Nee, das darfst Du nicht. Deine Datei ist zu groß...
Und dann per unlink(datei) wieder alles zu löschen?
Der Hintergrund ist, daß ich natürlich gar keinen Transfer bzw. eine Serverbelastung vermeiden möchte, wenn es geht.
Also, gibt es eine Möglichkeit VOR oder vielleicht auch WÄHREND der Übertragung feststellen zu können, daß die Datei größer als *wasweißich* ist, und dann schon abbrechen zu können?

Vielen Danke!

Reiner

  1. Hi,

    Aber was mich an dem Upload per CGI interessieren würde, wäre eine Möglichkeit, VOR dem Upload die Dateigröße ermitteln zu können. Ist es bisher nicht so, daß ich den ganzen Datenstrom erfassen muß, um dann zu sagen: Nee, das darfst Du nicht. Deine Datei ist zu groß...

    also, es geht folgendermaßen:

    • Der Browser bekommt vom Benutzer die Aufforderung, eine Datei an einen Server zu schicken, und führt dies auch aus.
    • Millionen Bytes machen sich auf den Weg.
    • Sie kommen allesamt auf (D)einem Server an, woraufhin dieser, wenn sie komplett sind, sie analysiert und feststellt, daß sie einem Script übergeben werden sollen.
    • Also tut der Server dies.
    • Dein Script wird gestartet und verfügt über die gesamten Millionen Bytes.

    Wo genau willst Du jetzt den Abbruch durchführen? Bevor die Daten auf dem Server sind, kannst Du mit CGI eh nichts machen. Dir bleiben höchstens clientseitige (=überlistbare, deaktivierbare) Methoden.

    Also, gibt es eine Möglichkeit VOR oder vielleicht auch WÄHREND der Übertragung feststellen zu können, daß die Datei größer als *wasweißich* ist, und dann schon abbrechen zu können?

    <img src="/images/04.gif" alt="">
    <../../tchg.htm>

    Wie alles clientseitiges ist dies alles andere als verbindlich. Eine Prüfung z.B. mit JavaScript ist übrigens nicht möglich.

    Cheatah

    1. <../../tchg.htm>

      ... und beachte das Wort "sollte" in diesem Text, wie ich bei eigenen Tests leidvoll erfahren durfte.

      1. <../../tchg.htm>

        ... und beachte das Wort "sollte" in diesem Text, wie ich bei eigenen Tests leidvoll erfahren durfte.

        Stimmt!
        Bei mir ist es (IE UND NC - akt. Versionen) piepegal, was "accept" und "maxlength" angeht!!!

        Reiner

  2. Aber was mich an dem Upload per CGI interessieren würde, wäre eine Möglichkeit, VOR dem Upload die Dateigröße ermitteln zu können. Ist es bisher nicht so, daß ich den ganzen Datenstrom erfassen muß, um dann zu sagen: Nee, das darfst Du nicht. Deine Datei ist zu groß...
    Und dann per unlink(datei) wieder alles zu löschen?

    Hallo, im Arschiev hab ich da leider auch nichts brauchbares gefunden. Zumindest gibt es eine Möglichkeit, den Datenstrom _während_ des Uploads zu überwachen und wenns zuviel wird die Übertragung abzubrechen. Dazu kannst Du den Rückgabewer der read()-Funktion verwenden. Wie Cheatah schon sagte, passiert das alles schon serverseitig!

    Hier nun mein Beispiel (ohne Gewaehr); Rolf

    sub upload{
    # $file ist der String aus dem FileInput
    # Sonderzeichen rausfiltern bevors weitergeht!
    $size = 0;
    my $sizemax = $maxgr * 1024; # Upload begrenzen
    my $xread = 0;
    my $x = 0;
    my $upfile = "Name der Datei auf dem Server";
    # Speichern der Datei auf dem Server
    open (UPDAT,">$updir/$upfile") &no_upfile;
    binmode UPDAT;
    while ($xread = read($file, $buffer, 1024)) {
      $size += $xread;
      if($size > $sizemax){
       print "<h2>Die hochzuladende Datei überschreitet die zulässige Größe von $sizemax KiloByte.</h2>Der Prozess wird abgebrochen";
       close UPDAT;
       unlink("$updir/$upfile"); # Fragmente löschen
       die;
      }
      print UPDAT $buffer;
    }      
    close UPDAT;
    }

    1. Danke!

      Reiner

    2. Hi,

      Zumindest gibt es eine Möglichkeit, den Datenstrom _während_ des Uploads zu überwachen und wenns zuviel wird die Übertragung abzubrechen.

      nicht wirklich - die Daten werden alle komplett vom Browser übertragen und sind auch bereits komplett auf dem Server vorhanden. Einzig innerhalb des Scripts wird zwischenzeitlich abgebrochen.

      Cheatah