Datei-Upload und Dateigröße
qbcafe
- perl
Wie kann ich die Dateigröße vor dem Upload ermitteln ?
Wie kann ich die Dateigröße vor dem Upload ermitteln ?
Soweit ich weiß gar nicht!
greets
myMojito
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
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
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.
=
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
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