我必须使用Perl和FTP将文件上传到Debian服务器。我尝试了$ftp->put
,它没有给我任何错误,但只上传了一个空文件(或创建了一个),而$ftp->copy
给了我一些奇怪的消息,我猜这是一个错误,又是一个空文件。< / p>
我的档案位于/home/upload
从put调试:
Upload file to FTP? (y/n): y
Net::FTP>>> Net::FTP(2.77)
Net::FTP>>> Exporter(5.64_03)
Net::FTP>>> Net::Cmd(2.29)
Net::FTP>>> IO::Socket::INET(1.31)
Net::FTP>>> IO::Socket(1.32)
Net::FTP>>> IO::Handle(1.31)
Net::FTP=GLOB(0xa7bdf30)<<< 220 (vsFTPd 2.3.5)
Net::FTP=GLOB(0xa7bdf30)>>> USER upload
Net::FTP=GLOB(0xa7bdf30)<<< 331 Please specify the password.
Net::FTP=GLOB(0xa7bdf30)>>> PASS ....
Net::FTP=GLOB(0xa7bdf30)<<< 230 Login successful.
Net::FTP=GLOB(0xa7bdf30)>>> CWD /home/upload/uploaded/
Net::FTP=GLOB(0xa7bdf30)<<< 250 Directory successfully changed.
Net::FTP=GLOB(0xa7bdf30)>>> PORT 127,0,0,1,212,114
Net::FTP=GLOB(0xa7bdf30)<<< 200 PORT command successful. Consider using PASV.
Net::FTP=GLOB(0xa7bdf30)>>> STOR file.txt
Net::FTP=GLOB(0xa7bdf30)<<< 150 Ok to send data.
Net::FTP=GLOB(0xa7bdf30)<<< 226 Transfer complete.
从副本调试:
Upload file to FTP? (y/n): y
Net::FTP>>> Net::FTP(2.77)
Net::FTP>>> Exporter(5.64_03)
Net::FTP>>> Net::Cmd(2.29)
Net::FTP>>> IO::Socket::INET(1.31)
Net::FTP>>> IO::Socket(1.32)
Net::FTP>>> IO::Handle(1.31)
Net::FTP=GLOB(0x9f45f48)<<< 220 (vsFTPd 2.3.5)
Net::FTP=GLOB(0x9f45f48)>>> USER upload
Net::FTP=GLOB(0x9f45f48)<<< 331 Please specify the password.
Net::FTP=GLOB(0x9f45f48)>>> PASS ....
Net::FTP=GLOB(0x9f45f48)<<< 230 Login successful.
Net::FTP=GLOB(0x9f45f48)>>> CWD /home/upload/uploaded/
Net::FTP=GLOB(0x9f45f48)<<< 250 Directory successfully changed.
Net::FTP=GLOB(0x9f45f48)>>> PWD
Net::FTP=GLOB(0x9f45f48)<<< 257 "/home/upload/uploaded"
Net::FTP=GLOB(0x9f45f48)>>> HELP SIZE
Net::FTP=GLOB(0x9f45f48)<<< 214-The following commands are recognized.
Net::FTP=GLOB(0x9f45f48)<<< ABOR ACCT ALLO APPE CDUP CWD DELE EPRT EPSV FEAT HELP LIST MDTM MKD
Net::FTP=GLOB(0x9f45f48)<<< MODE NLST NOOP OPTS PASS PASV PORT PWD QUIT REIN REST RETR RMD RNFR
Net::FTP=GLOB(0x9f45f48)<<< RNTO SITE SIZE SMNT STAT STOR STOU STRU SYST TYPE USER XCUP XCWD XMKD
Net::FTP=GLOB(0x9f45f48)<<< XPWD XRMD
Net::FTP=GLOB(0x9f45f48)<<< 214 Help OK.
Net::FTP=GLOB(0x9f45f48)>>> SIZE /home/file.txt
Net::FTP=GLOB(0x9f45f48)<<< 213 0
Net::FTP=GLOB(0x9f45f48)>>> PWD
Net::FTP=GLOB(0x9f45f48)<<< 257 "/home/upload/uploaded"
Net::FTP=GLOB(0x9f45f48)>>> CWD /home/file.txt
Net::FTP=GLOB(0x9f45f48)<<< 550 Failed to change directory.
Net::FTP=GLOB(0x9f45f48)>>> CWD /home/upload/uploaded
Net::FTP=GLOB(0x9f45f48)<<< 250 Directory successfully changed.
Net::FTP=GLOB(0x9f45f48)>>> PWD
Net::FTP=GLOB(0x9f45f48)<<< 257 "/home/upload/uploaded"
Net::FTP=GLOB(0x9f45f48)>>> PORT 127,0,0,1,161,36
Net::FTP=GLOB(0x9f45f48)<<< 200 PORT command successful. Consider using PASV.
Net::FTP=GLOB(0x9f45f48)>>> RETR /home/file.txt
Net::FTP=GLOB(0x9f45f48)<<< 150 Opening BINARY mode data connection for /home/file.txt (0 bytes).
Net::FTP=GLOB(0x9f45f48)<<< 226 Transfer complete.
Net::FTP=GLOB(0x9f45f48)>>> PORT 127,0,0,1,233,200
Net::FTP=GLOB(0x9f45f48)<<< 200 PORT command successful. Consider using PASV.
Net::FTP=GLOB(0x9f45f48)>>> STOR copied.txt
Net::FTP=GLOB(0x9f45f48)<<< 150 Ok to send data.
write($buf,$size,[$timeout]) at /usr/local/share/perl/5.14.2/Net/FTP/File.pm line 128
相关代码:
sub write_file(){
my $file = $savefile;
if($file ne "" && $file ne "\n"){
open(DATA, ">$file") || die(print("I cannot save to the file [$file]"));
print("Created file [$file]\r\nWriting data to file. Please be patient...");
foreach(@file){
print DATA $_ . "\r\n";
$indexer++;
print ".\b";
}
print("\r\n\r\nFinished! $indexer lines written to file.\r\n");
print("Upload file to FTP? (y/n): ");
my $yn = <STDIN>;
if(lc($yn) eq "y\n"){
my $ftp = Net::FTP->new("127.0.0.1",Timeout=>250, Debug => 1) or die "Cannot connect to 127.0.0.1: $@";
$ftp->login("upload",'ftp') or die "Cannot login ", $ftp->message;
my $file_to_put = $file;
my $dir = "/home/upload/uploaded/";
$ftp->cwd($dir) or die "Can't cwd to $dir\n";
#$ftp->put($file_to_put) or die "Can't put $file into $dir\n";
#if (! $ftp->put($file_to_put)) {
if (! $ftp->copy($file_to_put, "copied.txt", 1000)) {
my $ftp_message = $ftp->message;
chomp($ftp_message);
print "[Error] UNABLE TO PUT FILE $file_to_put- [$ftp_message]\n";
}
#$ftp->quit;
}
}
}
答案 0 :(得分:1)
您必须关闭strem才能将其传输到远程主机:
open(DATA, ">$file") || die(print("I cannot save to the file [$file]"));
print("Created file [$file]\r\nWriting data to file. Please be patient...");
foreach(@file){
print DATA $_ . "\r\n";
$indexer++;
print ".\b";
}
close(DATA);