Shopsystem ShopPilot

ShopPilot => SSP - Shop Server Pages => Thema gestartet von: dobra am Mai 17, 2009, 10:07:36

Titel: Dateigröße bei Bildupload limitieren
Beitrag von: dobra am Mai 17, 2009, 10:07:36
Hallo,

wenn man dem Kunden/Besucher erlaubt Dateien hochzuladen ist es sinnvoll auch die Dateigröße zu limitieren.
Das geht mit ssp ganz einfach  :)

hier ein Beispiel anhand der Uploadfunktion für Mouspadbeschriftung im Konfiguratorshop

(die rot markierten Teile beschränken die Dateigröße => ist das Bild größer, wird KEIN upload durchgeführt und eine Fehlermeldung ausgegeben)

        ## Upload durchgeführt: Speichern und in WK-Datei eintragen
      my $image = ssp::get_var_form('uploadimage');
      my $imagedata = ssp::get_var_form_filedata('uploadimage');
      my $imagedirectory = $m_uploaddir;
      my $filename = "";

      my $kb = 300;
      my $byte = $kb*1024;

        ## Gültige Artikelnummer?
      if ($itemid ne $ssp::undefined) {
            ## Gültiges Bild hochgeladen?
         if (length($image) && ($image ne $ssp::undefined)) {
            ## maximal zulässige Dateigröße?
            if (length($imagedata) < $byte) {
               my $fileextension = "";
               ## Versuche gültige Dateiendung zu bestimmen
               if ($image =~ /.*(\.[\w\d]+)$/) {
                  $fileextension = lc($1);
                  if (!_isExtensionAllowed($fileextension)) {
                     $html .= qq|<div class="error">$m_text_invalidextension</div>|;
                  } else {
                     $filename = "$imagedirectory/" . $ssp::xxsession . "_" . time . $fileextension;
                     ## Zuordnung Artikel <> Bild in WK-Datei eintragen
                     ssp::cart_write_var("image_$itemid", $filename);
                     
                     ## Datei im Uploadverzeichnis speichern
                     my $saveto = "$main::catalog_home/$filename";
                     if (!open( FILEHANDLE, ">$saveto" )) {
                        main::syserr("konnte Datei nicht anlegen: $!");
                     }
                     binmode FILEHANDLE;         # Im Binämodus schreiben
                     print FILEHANDLE $imagedata; # Inhalt in Datei schreiben
                     close( FILEHANDLE );      # Datei schliessen
                     
                     ## Erfolgsmeldung ausgeben
                     $html .= qq|<div class="added">$m_text_added</div>|;
                  }
               } else {
                  ## Ungültige Dateiendung
                  $html .= qq|<div class="error">$m_text_invalidfilename</div>|;
               }
            } else {
                  ## Limit für Dateigröße überschritten
                  $html .= qq|<div class="error">Datei zu groß - maximal $kb KB erlaubt!!!</div>|;
                  }
         } else {
            main::syserr("Ungültiges Bild! |$itemid|$image|$imagedata|");
         }
      }

Bei  my $kb = 300; kann die erlaubte Dateigröße in KB angegeben werden