2 Stimmen

Warum lädt Net::FTP von Perl meine Datei nicht hoch?

Ich versuche, mehrere Dateien hochzuladen über Netz::FTP und Perl. Hat jemand dies getan, wie auch meine grundlegende Skript unten fehlschlägt?

use Net::FTP;
use File::Basename;

my $ftp;
my $host ='56.309.24.2';
my $user ='user';
my $pw   ='pass';

my $file ='097360718843.jpeg';
my $path ='public_html/uploaded/product_images';

chomp($host,$user,$pw,$path, $file);

$ftp=Net::FTP->new($host) or die "could not login";
$ftp->login($user,$pw) or die "could not login";
$ftp->cwd($path) or die "could not cwd $path";
$ftp->ls;
$ftp->put($file) or die "could not put $file";
$ftp->site("chmod 600 " . basename($file));

Hier ist ein Protokoll der Übertragung:

Net::FTP>>> 
Net::FTP(2.75) 
Net::FTP>>> Exporter(5.58) 
Net::FTP>>> 
Net::Cmd(2.26) 
Net::FTP>>> IO::Socket::INET(1.27) 
Net::FTP>>> IO::Socket(1.28) 
Net::FTP>>> IO::Handle(1.24) 
Net::FTP=GLOB(0x180c6a8)<<< 220---------- Welcome to Pure-FTPd [TLS] ---------- 
Net::FTP=GLOB(0x180c6a8)<<< 220-You are user number 1 of 50 allowed. 
Net::FTP=GLOB(0x180c6a8)<<< 220-Local time is now 16:19. Server port: 21. 
Net::FTP=GLOB(0x180c6a8)<<< 220-IPv6 connections are also welcome on this server. 
Net::FTP=GLOB(0x180c6a8)<<< 220 You will be disconnected after 15 minutes of inactivity.
Net::FTP=GLOB(0x180c648)>>> user user_name 
Net::FTP=GLOB(0x180c648)<<< 331 User user_name OK. Password required 
Net::FTP=GLOB(0x180c648)>>> PASS .... 
Net::FTP=GLOB(0x180c648)<<< 230-User user_name has group access to: user_name wheel 
Net::FTP=GLOB(0x180c648)<<< 230 OK. Current restricted directory is / 
Net::FTP=GLOB(0x180c648)>>> CWD public_html/uploaded/product_images/ 
Net::FTP=GLOB(0x180c648)<<< 250 OK. Current directory is /public_html/uploaded/product_images 
Net::FTP=GLOB(0x180c648)>>> PORT 192,168,1,10,200,38 
Net::FTP=GLOB(0x180c648)<<< 200 PORT command successful
Net::FTP=GLOB(0x180c648)>>> NLST 
Net::FTP=GLOB(0x180c648)<<< 150 Connecting to port 50703 
Net::FTP=GLOB(0x180c648)<<< 226-Options: -a 
Net::FTP=GLOB(0x180c648)<<< 226 Output truncated to 2000 matches 
Net::FTP=GLOB(0x180c648)>>> ALLO 7903 
Net::FTP=GLOB(0x180c648)<<< 200 Zzz... 
Net::FTP=GLOB(0x180c648)>>> PORT 192,168,1,10,200,39 
Net::FTP=GLOB(0x180c648)<<< 200 PORT command successful 
Net::FTP=GLOB(0x180c648)>>> STOR 097360718843.jpeg 
Net::FTP=GLOB(0x180c648)<<< 150 Connecting to port 50704 
Net::FTP=GLOB(0x180c648)<<< 226-File successfully transferred
Net::FTP=GLOB(0x180c648)<<< 226 0.381 seconds (measured here), 20.21 Kbytes per second 
Net::FTP=GLOB(0x180c648)>>> SITE chmod 600 097360718843.jpeg 
Net::FTP=GLOB(0x180c648)<<< 200 Permissions changed on 097360718843.jpeg

3 Stimmen

Wo versagt das Skript? Oder wird das Skript abgeschlossen, aber die Datei nicht hochgeladen?

0 Stimmen

Der Vorgang wird abgeschlossen, aber die Datei wird nicht hochgeladen.

0 Stimmen

Wie überprüfen Sie, ob die Datei hochgeladen wurde? Laut dem von Ihnen geposteten Debug-Protokoll wurde die Datei problemlos hochgeladen.

3voto

Sinan Ünür Punkte 114993

Verwenden Sie

my $ftp = Net::FTP->new($host, Debug => 1) 
    or die "Could not create FTP object: $@";

Zusätzliche bewährte Verfahren:

  • Stellen Sie sicher, dass Sie

    use strict;
    use warnings;
  • Deklarieren Sie Variablen nicht, bevor sie benötigt werden.

  • Geben Sie den Fehler in den Fehlermeldungen an.

Probieren Sie also das folgende Skript aus:

#!/usr/bin/perl

use strict;
use warnings;

use Net::FTP;

my $host ='56.309.24.2';
my $user ='user';
my $pw   ='pass';

my $file ='097360718843.jpeg';
my $path ='public_html/uploaded/product_images';

my $ftp = Net::FTP->new($host, Debug => 1) 
    or die "Could not connect to '$host': $@";

$ftp->login($user, $pw) 
    or die sprintf "Could not login: %s", $ftp->message;

$ftp->cwd($path) 
    or die sprintf "Could not login: %s", $ftp->message;

$ftp->ls;

$ftp->binary;

$ftp->put($file) 
    or die die sprintf "Could not login: %s", $ftp->message;

$ftp->site("chmod 600 $file");

1voto

EvilTeach Punkte 27313

Überprüfen Sie den Schutz des Zielverzeichnisses. Stellen Sie sicher, dass Sie dort Dateien erstellen können.

Prüfen Sie den Schutz der Dateien selbst Stellen Sie sicher, dass Sie sie überschreiben können.

0voto

Titenis Punkte 558

Der Upload ist erfolgreich:

226-File successfully transferred

und es sollte über eine Datei-URL in einem Webbrowser zugänglich sein. In einem FTP-Client kann sie jedoch nicht angezeigt werden, da die Dateiliste des FTP-Servers auf mehr als 2000 Dateien begrenzt ist:

226 Output truncated to 2000 matches

Die Lösung wäre das Speichern in einem anderen Ordner oder, wenn Sie Zugang zur serverseitigen FTP-Konfiguration haben, das Ändern des Dateilimits.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X