Perl – Dateiupload über CGI-LIB

Perl - Formularauswertung mit CGI-LIBÜber die CGI-LIB wird die Auswertung von Formularen um einiges
erleichtert. Das Beispiel des zweiten Teils des CGI-LIB Workshops
zeigt, wie auf einfache Art, Dateien auf den Server hochgeladen
werden können.

Über das CGI-LIB können Sie auch einen Dateiupload schnell
ermöglichen. Damit können z.B. Besucher, bestimmte Dateien
auf ihren Server oder ihren Webspace hochladen.

Das HTML Formular für das Perl Programm

Das HTML Formular für das Perl Programm

Dabei können User von ihrem Rechner Dateien auf den Server-Rechner
hochladen.

Das HTML-Formular:

<form action="/cgi-bin/bsp2.pl" method=post
enctype="multipart/form-data">
<p>Schicken Sie mir eine Text- oder
HTML-Datei bis zu 1 KByte!<br>
<input type=file name="datei" size=30><br>
<input type=submit value="Absenden">
</p></form>

CGI Skript zur Ausgabe des Dateiinhaltes

Dieses CGI Skript gibt den Inhalt der Datei (nur) aus.

#!/usr/bin/perl
require "cgi-lib.pl";      # Version 2.17
$cgi_lib'maxdata = 10000;
ReadParse();
CgiDie('Sie haben keine Datei ausgewählt.',
   'Bitte den Backbutton klicken und die
Eingabe wiederholen.')
    if !$in{'Datei'};
print &PrintHeader;
print &HtmlTop("Der Inhalt der gesendeten Datei:");
print PrintVariables();
print &HtmlBot;

CGI Skript, das die Datei auf dem Server speichert


#!/usr/bin/perl
require "cgi-lib.pl";      # Version 2.17
$cgi_lib'maxdata = 100000;
$cgi_lib'writefiles = "/temp";
ReadParse();
CgiDie('Sie haben keine Datei ausgewählt.',
  'Bitte den Backbutton klicken und die Eingabe
wiederholen.')
   if !$in{'Datei'};
print &PrintHeader;
print &HtmlTop('Die Datei wurde hochgeladen');
print "Die gesendete Datei wurde wie
 folgt gespeichert: $in{Datei}.<br>\n";
print &HtmlBot;

Erläuterung:

Wichtig sind im Formlar diese Angaben im einleitenden Formtag:
method="post" und enctype="multipart/form-data".
Die Maximale Größe der Datei kann im Script festgelegt
werden in der Zeile $cgi_lib'maxdata = 10000;
(Anzahl Bytes, die maximal akzeptiert werden). Wird diese Größe
überschritten, erfolgt eine Fehlermeldung. Das Beispiel zeigt
auch eine Möglichkeit, wie die Funktion CgiDie()
verwendet werden kann: Im Argument können dieser Funktion zwei
Meldungen mitgegeben werden, die erste erscheint als H1-Überschrift
und die zweite in normaler Schrift. Mit CgiDie()
kann die weitere Scriptverarbeitung abgebrochen werden, wenn wie
hier im Beispiel eine Eingabe nicht erfolgte. Das ist auch der Unterschied
zur Funktion CgiError(), welche nur eine selbstdefinierte
Fehlermeldung ausgibt, das weitere Ausführen des Scripts jedoch
nicht unterbindet.

Wie kommt nun die Datei auf den Server?

Soll die Datei auf dem Server beispielsweise im Verzeichnis /temp
gespeichert werden, erfordert das im Script eine weitere Zeile:
$cgi_lib'writefiles = "/temp";
Ist diese Zeile angegeben, wird die hochgeladene Datei in diesem
Pfad gespeichert unter einem Namen, den cgi-lib.pl bestimmt
(es ist dafür gesorgt, dass Dateinamen nicht mehrfach vergeben
werden). Der Dateiname selbst steht sodann in der Variablen '$in
{Datei}
'
bereit, dessen Inhalt sich also geändert hat.
Der Rest ist Tipparbeit …

Zusammenfassung

Mit der Library cgi-lb.pl gibt deren Autor Steven E.
Brenner
dem Perl-Programmierer eine Bibliothek in die Hand,
die den Schreibaufwand für Scripte mächtig verringert
wenn es um die Verarbeitung von Forms geht. Das zeigen die Beispiele
in eindrucksvoller Art und Weise.

Vielen dank an Herr Rolf Rost von I-NetLab,
der uns den Artikel zur Verfügung gestellt hat. Bei Fragen
können Sie sich an ihn wenden. Auf seiner Webseite finden Sie
ein Kontakt-Formular.

This entry was posted in Perl. Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *