Nikolaus Lorenz: Dateien mit File::Copy speichern

Hallo
Mein Problem ist, dass ich ein Bild von einem Server auf meinem Rechner speichern will. Die Adresse des Bildes ist fest.

Ich habe es mit dem Befehl File::Copy versucht:

use File::Copy;
copy("[Bild]", "[Hierhin soll das Bild]") or die "Datei nicht gefunden";

Mein Problem ist nun, dass ich das Bild zwar kopieren kann, wenn es sich auf meinem Rechner befindet, es aber nicht Funktioniert, wenn ich eine Adresse (z.B.: http://www.test.de/immages/bild.jpg) eingebe.
Wenn ich dies mache, findet das Script kein Bild.

Hat hier jemand eine Idee.

PS: Ich habe es auch schon damit versucht, das Bild Zeichen für Zeichen einzulesen, dies hat aber auch nicht funktioniert.

Für eine Lösungsidee wäre ich sehr dankbar.

Nikolaus

  1. Hallo Nikolaus,

    Mein Problem ist, dass ich ein Bild von einem Server auf meinem Rechner speichern will. Die Adresse des Bildes ist fest.
    Ich habe es mit dem Befehl File::Copy versucht:

    Nein, damit geht es nicht. Du willst über eine Verbindung Server-Client etwas "schicken", was begrifflich absolut nichts mit dem Kopieren von Dateien zu tun hat. Was du realisieren willst, ist begrifflich ein "Download". So etwas kannst du stark vereinfacht so umsetzen:

    $path_file = "./deinbild.gif";
    @data = stat("$path_file");
    print "Content-Type: application/octet-stream\n";
    print "Content-Length: $data[7];\n";
    print "Content-Disposition: attachment; filename=$file\n\n";
    print "Cache-Control: private;\n";
    open (FILE,"<$path_file");
    binmode(FILE);
    binmode(STDOUT);
    while(defined($outfile = <FILE>)) {
      print "$outfile";
    };
    close(FILE);

    Ob der Download allerdings als solcher erkannt wird, liegt im Ermessen des Clients, darauf hast du keinen Einfluss. Du kannst dem Client höchstens einen Inhaltstyp ("application/octet-stream") mitschicken, der ihn zum Download veranlassen sollte, aber nicht muss.

    Sollte dir die andere Richtung vorschweben (vom Client zum Server), könnte dir dieses Beispiel helfen:

    http://www.thomas-fahle.de/pub/perl/Net/Net_FTP.html#get

    Vielleicht hilft's
    Siechfred