Steffen Beyer: Hochladen und speichern von Bildern per Script

Sehr geehrte Damen und Herren,

mein Problem kann ich wie folgt schildern:

Ich habe ein Script, welches Bilder im GIF- und JPG-Format hochladen soll. So schön, so gut! Ich nutze hierfür das CGI-Modul.

Folgendes Formular wird zum File-Upload genutzt:

<form action="/cgi-bin/uploadfile.pl" method="post" enctype="multipart/form-data">
<input type="file" name="datei" size="30">
<input type="hidden" name="filename" value="xyz">
<input type="hidden" name="upload_dir" value="bilder">
<input type="submit" value="Upload starten">
</form>

Nach dem Abschicken wertet mein Script das ganze aus und ich will das Bild jetzt speichern, dazu führe ich folgendes Code aus:

open (DATEI, ">$upload_dir$filename.gif");
binmode DATEI;
print DATEI $file->param("datei");
close DATEI;

Der Fehler an der Sache ist, dass er es jetzt zwar unte
/bilder/xyz.gif
speichert, aber nicht als Bild, sondern wenn man das Bild dann aufruft wird angezeigt, wo das Bild auf der Festplatte lag, also der Inhalt von $file->param("datei"), z.B.
C:\Wíndows\bild.gif

Was mache ich falsch, kann mir jemand helfen?

Mfg.
Steffen

  1. Hallo,

    <input type="hidden" name="upload_dir" value="bilder">

    Ich halte das für riskant. Zumindest solltest Du den Inhalt dieses Parameters in Deinem Script sehr sorgfältig prüfen, da es ein leichtes ist, ein Formular zu modifizieren, bevor es verwendet wird.

    Nach dem Abschicken wertet mein Script das ganze aus und ich will das Bild jetzt speichern, dazu führe ich folgendes Code aus:

    open (DATEI, ">$upload_dir$filename.gif");
    binmode DATEI;
    print DATEI $file->param("datei");
    close DATEI;

    Der Fehler an der Sache ist, dass er es jetzt zwar unte
    /bilder/xyz.gif
    speichert, aber nicht als Bild, sondern wenn man das Bild dann aufruft wird angezeigt, wo das Bild auf der Festplatte lag, also der Inhalt von $file->param("datei"), z.B.
    C:\Wíndows\bild.gif

    Du willst die Dokumentation von CGI.pm nochmals sorgfältig lesen. Und zwar im speziellen das Kapitel 'CREATING A FILE UPLOAD FIELD'. Hier wird nämlich auch beschrieben, wie man auf die Inhalte bzw. Zusatzinformationen der übertragenen Datei zugreift.

    Grüße
      Klaus

    1. Hallo,

      <input type="hidden" name="upload_dir" value="bilder">

      Ich halte das für riskant. Zumindest solltest Du den Inhalt dieses Parameters in Deinem Script sehr sorgfältig prüfen, da es ein leichtes ist, ein Formular zu modifizieren, bevor es verwendet wird.

      ist mir klar, wird im Script natürlich abgecheckt!

      Nach dem Abschicken wertet mein Script das ganze aus und ich will das Bild jetzt speichern, dazu führe ich folgendes Code aus:

      open (DATEI, ">$upload_dir$filename.gif");
      binmode DATEI;
      print DATEI $file->param("datei");
      close DATEI;

      Der Fehler an der Sache ist, dass er es jetzt zwar unte
      /bilder/xyz.gif
      speichert, aber nicht als Bild, sondern wenn man das Bild dann aufruft wird angezeigt, wo das Bild auf der Festplatte lag, also der Inhalt von $file->param("datei"), z.B.
      C:\Wíndows\bild.gif

      Du willst die Dokumentation von CGI.pm nochmals sorgfältig lesen. Und zwar im speziellen das Kapitel 'CREATING A FILE UPLOAD FIELD'. Hier wird nämlich auch beschrieben, wie man auf die Inhalte bzw. Zusatzinformationen der übertragenen Datei zugreift.

      Habe ich bereits mehrmals gelesen und bin trotzdem zu keinem Ergebnis gekommen :-(

      1. Hi!

        <input type="hidden" name="upload_dir" value="bilder">

        Ich halte das für riskant. Zumindest solltest Du den Inhalt dieses Parameters in Deinem Script sehr sorgfältig prüfen, da es ein leichtes ist, ein Formular zu modifizieren, bevor es verwendet wird.

        ist mir klar, wird im Script natürlich abgecheckt!

        Wie machst Du das genau?
        Was wird überprüft?

        Gruß
        Alexander

    2. Hallo Klaus,

      Du willst die Dokumentation von CGI.pm nochmals sorgfältig lesen. Und zwar im speziellen das Kapitel 'CREATING A FILE UPLOAD FIELD'. Hier wird nämlich auch beschrieben, wie man auf die Inhalte bzw. Zusatzinformationen der übertragenen Datei zugreift.

      Habe es jetzt doch hinbekommen. Danke.

      Mfg.
      Steffen