Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]498[/thread]

Datei Informationen vor dem Upload Abfangen



<< |< 1 2 >| >> 17 Einträge, 2 Seiten
Keanuf
 2005-06-03 03:02
#4990 #4990
User since
2005-06-02
9 Artikel
BenutzerIn
[Homepage] [default_avatar]
Guten Abend Perl Community,

Folgendes Problem oder Anfrage.
ich habe ein HTML Formular über das ich Bilder hochlade.

Da die Bilder doch sehr gross sind, habe ich den Upload mit Hilfe der
$CGI::POST_MAX variabel auf 5MB beschränkt.

Nun möcht ich aber schon beim drücken auf den sende knopf
reagieren und nicht erst,
wenn die Datei schon raufgeladen wurde bis zur Maximalen Datei Grösse.

Wie komm ich nun an die Informationen heran ?.

Folgenden Link habe ich hier gefunden:
upload CGI

hier gibt es eine funktion upload_hook.
Diese soll man mit einer sub aufrufen und einen $data Wert angeben.
Nur leider habe ich keine Ahnung, was für einen Wert ich da eingeben soll.

Ich hoffe ihr könnt mir hier helfen.

Zusammenfassung:
Also ich brauch eine Lösung die Datei grösse zu ermitteln, noch bevor die komplette Datei hochgeladen wird.

Auch andere Lösungswege sind mir recht ;)

Code kann ich nicht viel anbieten.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
  my $ori_datei = "";
my $datei_typ = "";
my $typ = "";
my $kop_datei = "";
my @dateiinfo =();
my $web = new CGI;


print $web->header;
print $web->start_html(-title => 'Datei hochladen');
print $web->h1('Datei hochladen');
my $ori_dateiname = $web->param("userfile");
my $kop_dateiname = "/pfad/zur/Bild/".$ori_dateiname;
$datei_typ = $web->uploadInfo($ori_dateiname);
print %{$datei_typ};
foreach $typ (%{$datei_typ}) {
print "<br>$typ";
}
$ori_datei = $web->upload("userfile");
@dateiinfo = stat($ori_datei);
open (KOPDATEI,">$kop_dateiname");
binmode (KOPDATEI);
binmode ($ori_datei);
while (<$ori_datei> {
print (KOPDATEI $buffer);
#print "<br> Grössenangabe : ".$dateiinfo[7];
}
close (KOPDATEI);
print "<br> Datei wurde raufgeladen";


Das ganze ist noch nicht produktiv,
da ich ja hier und da noch Sicherheiten einbauen
muss und will.
Es ist reines test Skript.

Für jede Hilfe bin ich euch dankbar.
Danke im vorraus.

Wenn ihr mehr infos braucht, dann fragt einfach nach.
esskar
 2005-06-03 11:16
#4991 #4991
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
mit normalem cgi kommst du an die sache wohl nicht ran...
ich denke mit mod_perl kannst du dich bei nem upload wecken lassen und schoneinmal teile auslesen!
pq
 2005-06-03 18:04
#4992 #4992
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
wenn der clien keine content-length mitsendet, hast du keine möglichkeit,
das herauszufinden, denke ich.
also probier mal ein wenig aus, uploadInfo könnte auch hilfreich sein.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Keanuf
 2005-06-03 18:15
#4993 #4993
User since
2005-06-02
9 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke für die Infos,
villeicht hat hier noch jemand eine Idee.

Aber ich denke, das ich das einfach vorher nicht abfangen kann.
Da anscheinend Perl erst zurgriff auf die Datei hat,
wenn diese dann auch temporär am Server angekommen ist.

Also muss da anscheinend erst der Web Server in diesem Fall ein Apache reagieren.

ich schau mal weiter.

Nochmals Danke.

Ich hoff ich kann auch bald mal aushelfen ;)
pq
 2005-06-04 12:52
#4994 #4994
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
hast du denn $ENV{CONTENT_LENGTH} überhaupt ausprobiert? solang der
client das mitschickt, kannst du das ja überprüfen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
esskar
 2005-06-04 13:26
#4995 #4995
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=pq,04.06.2005, 10:52]hast du denn $ENV{CONTENT_LENGTH} überhaupt ausprobiert? solang der
client das mitschickt, kannst du das ja überprüfen.[/quote]
Als CGI wird man aber wohl erst gestartet, wenn die Datei schon oben ist, oder?
Keanuf
 2005-06-05 03:00
#4996 #4996
User since
2005-06-02
9 Artikel
BenutzerIn
[Homepage] [default_avatar]
pq Danke für den Tipp, aber Esskar hat hier anscheinend recht.
Das Skript reagiert ja erst, wenn die Datei temporär am Server ist.
pq
 2005-06-07 13:03
#4997 #4997
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=Keanuf,05.06.2005, 01:00]pq Danke für den Tipp, aber Esskar hat hier anscheinend recht.
Das Skript reagiert ja erst, wenn die Datei temporär am Server ist.[/quote]
sicher? also $ENV{CONTENT_LENGTH} kann ich mir sofort ausgeben lassen.
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
Keanuf
 2005-06-08 00:44
#4998 #4998
User since
2005-06-02
9 Artikel
BenutzerIn
[Homepage] [default_avatar]
@pq was meinst du denn mit sofort ausgeben ??

Sobald der User den Bestätigungsbutton betätigt hat,
oder wenn dann dein Skript reagiert ??

Also bei mir scheint das Skript erst zu reagieren, wenn die Datei durch den Apache empfangen wurde.
Das merk ich, wenn ich grössere Dateien aufspiele.

Villeicht hast du ein Beispiel, an dem ich das mal nachvollziehen kann.
Bei dem die Variable $ENV{CONTENt_LENGHT} reagiert, noch bevor die Datei raufgeladen wurde


Danke für deine Hilfe
betterworld
 2005-06-08 03:07
#4999 #4999
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
Hast Du versucht, an den Anfang des Scriptes zu schreiben:
Code: (dl )
1
2
3
4
5
#!/usr/bin/perl
use strict;
use CGI::Carp qw/fatalsToBrowser/;

die "Datei zu lang\n" if $ENV{CONTENT_LENGTH} > 5000000;
\n\n

<!--EDIT|betterworld|1118185803-->
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2005-06-03 03:02.