繁体   English   中英

Perl FTP将空文件上传到服务器

[英]Perl FTP uploading empty file to server

我必须使用Perl和FTP将文件上传到Debian服务器。 我尝试了$ftp->put ,它没有给我任何错误,但是只上传了一个空文件(或创建了一个文件),而$ftp->copy却给了我一些奇怪的消息,我猜是一个错误,也是一个空文件。

我的文件位于/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;
            }
    }

}

您必须关闭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);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM