Schrift
[thread]8195[/thread]

Dateiname für Uploadscript übergeben

Leser: 1


<< >> 9 Einträge, 1 Seite
stefank86
 2006-07-24 18:38
#68356 #68356
User since
2003-10-13
27 Artikel
BenutzerIn
[default_avatar]
Servus,

ich habe beschäftige mich zur Zeit mit einem Script, dass Dateien auf einen Server laden soll.
Das Script aus dem WIKI funktioniert wunderbar nur würde ich gerne das auslesen des Formulars vom Uploadteil trennen.

Hier weiß ich nun nicht, wie ich die Datei übergeben muss, da ich ja param('datei') nicht verwenden kann.

Code: (dl )
1
2
3
my $cgi = CGI->new();
my %parameter = $cgi->Vars();
my $file = $parameter{myfile};


So wie ich normalerweise die Formuldaten übergebe (s.o.) scheint es jedenfalls nicht zu funktionieren - am Server kommt nämlich lediglich eine 0KB - Datei an.

Ich hoffe, mein Problem deutlich genug beschrieben zu haben, und dass mir jemand helfen kann.

Stefan
renee
 2006-07-24 18:41
#68357 #68357
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich verstehe nicht so ganz was Du wohin übergeben willst und was Du mit "trennen " meinst...
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
stefank86
 2006-07-24 18:54
#68358 #68358
User since
2003-10-13
27 Artikel
BenutzerIn
[default_avatar]
Das Auslesen der Formulardaten und das Raufladen der Datei erfolgt einfach in zwei unterschiedlichen Skripten.
Und so muss ich ja die Datei vom einen zum anderen übergeben, weil ich beim Raufladen nicht param('...') verwenden kann.
docsnyder
 2006-07-25 14:01
#68359 #68359
User since
2005-09-08
300 Artikel
BenutzerIn
[Homepage] [default_avatar]
@stefank86

Warum übergibst den Dateinamen nicht einfach als Parameter in der URL, mit dem Du das zweite Skript (CGI) aufrufst?

Gruß, Doc
stefank86
 2006-07-27 12:22
#68360 #68360
User since
2003-10-13
27 Artikel
BenutzerIn
[default_avatar]
Die Übergabe an sich ist ja nicht das Problem. Ich weiß nur nicht, wie ich die Datei in einer Variable speichern kann.

Code: (dl )
1
2
3
my $cgi = CGI->new();
my %parameter = $cgi->Vars();
my $file = $parameter{myfile};


Wie im ersten Beitrag geschrieben, funktioniert es so, wie oben zu sehen und wie ich es mit den anderen Variablen mache leider nicht. Dabei wird mir zwar eine Datei am Server angelegt, diese hat aber 0KB.


Code: (dl )
my $file = param('myfile')


Das würde zwar gehen ist mir ab er zu statisch, da mehrere Dateien auf einemal raufgeladen werden können sollen.
stefank86
 2006-07-31 15:07
#68361 #68361
User since
2003-10-13
27 Artikel
BenutzerIn
[default_avatar]
Vielleicht sollte ich verdeutlichen, dass ich eigentlich nicht den Dateinamen, sondern das Filehandle brauche.
Wieso bekomme ich dieses nicht mit Vars()? Eigentlich sollte Vars() doch die gleichen Werte wie param('feldname') liefern, oder?
renee
 2006-07-31 16:05
#68362 #68362
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Den Filehandle bekommst Du mit upload('feldname').\n\n

<!--EDIT|renee|1154348515-->
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
stefank86
 2006-07-31 16:32
#68363 #68363
User since
2003-10-13
27 Artikel
BenutzerIn
[default_avatar]
Mit Vars() wäre es so schon komfortabel gewesen. Jetzt hab ich eben eine Schleife mehr drin.

Danke.
Dubu
 2006-07-31 17:00
#68364 #68364
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Vielleicht ist nicht ganz klar, wie ein Dateiupload in HTTP funktioniert: Der Dateiinhalt wird zusammen mit den anderen Parametern als POST-Daten übertragen (in einer HTTP-Message des Typs "multipart/form-data"; deshalb ist der Dateiname, wie er vom Browser übergeben wird, auch ziemlich wurscht für den Upload). Es gibt also keine getrennte Übertragung nach dem Motto "gib mir erstmal den Dateinamen, und dann hole ich mir den Dateiinhalt". Das Dateihandle, welches man von CGI.pm bekommt, ist ein Handle für die temporäre Datei, in der CGI.pm erstmal den Dateiinhalt zwischengespeichert hat, bis sich das CGI-Skript um die Daten kümmert.

Daher ist es schwierig, die Auswertung des Dateiinhalts und die der übrigen Parameter in zwei Skripte aufzuteilen. Entweder, man wertet alles selber aus (was aber bei "multipart/form-data" nicht trivial ist) oder man überlässt alles CGI.pm, installiert aber einen "upload_hook", um sich selber um den Dateiinhalt zu kümmern, wenn die Parameterauswertung an diesen Teil kommt. Den Inhalt könnte man dann an ein zweites Skript weiterleiten.
Ich sehe darin aber keinerlei Vorteil gegenüber der Methode, alles CGI.pm zu überlassen und sich mit upload() das Filehandle zu der temporären Datei geben zu lassen.

Mehr zum upload_hook steht in CGI unter CREATING A FILE UPLOAD FIELD.
<< >> 9 Einträge, 1 Seite



View all threads created 2006-07-24 18:38.