【发布时间】:2020-01-02 11:55:08
【问题描述】:
我正在尝试使用我的 perl 脚本中的 ftp 将一个文件从我的本地 Windows 7 客户端上传到我的远程 linux 服务器。我正在使用 Net::FTP 模块。我想在目录 /home/myname/Uploads/coworkers.json 中创建远程 .json 文件。脚本给了我这个错误:
script.pl 第 148 行的文件描述符错误:无法创建文件。
script.pl(摘录):
my ($ftp, $host, $user, $pass, $fname, $remotedir, $rfile);
$host = "xxx.xxx.xxx.xxx";
$user = "myname";
$pass = "mypw";
$remotedir = "/home/myname/Uploads/";
$fname = "coworkers.json";
$ftp = Net::FTP->new($host, Debug => 0) or die "Connection to $host failed: $@";
print $ftp->message;
$ftp->login($user, $pass) || die $ftp->message;
print $ftp->message; # LOGIN SUCCESSFUL
$ftp->cwd($remotedir);
print $ftp->message; # DIRECTORY SUCCESSFULLY CHANGED
$ftp->put($fname, $fname) or die "$!"; # ERROR line 148
print $ftp->message;
$ftp->quit;
print $ftp->message;
当 Debugging 设置为 1 时,输出如下:
...
Login successful.
Net::FTP=GLOB(0x....)>>>> CWD /home/myuser/Uploads/
Net::FTP=GLOB(0x....)><<< 250 Directory successfully changed.
Directory successfully changed.
Net::FTP=GLOB(0x....)>>>> PASV
Net::FTP=GLOB(0x....)><<< 227 Entering Passive Mode (xx,xx,xx,xx,218,232).
Net::FTP=GLOB(0x....)>>>> STOR coworkers.json
Net::FTP=GLOB(0x....)><<< 553 Could not create file.
Bad file descriptor at script.pl line 148.
【问题讨论】:
-
目录没有权限,或者同名的写保护文件已经存在。
-
请将
Debug设置为1,并将输出包含在您的问题中。或者至少显示$ftp->message而不是死。很可能包含上传失败的原因。 -
@Steffen Ullrich:我添加了调试输出,但我看不到更多信息如何帮助解决我的问题。
-
@MartinPrikryl:不,我不能。当 ftp> put coworkers.json coworkers.json 时,它说:200 PORT 命令成功。考虑使用 PASV。 553 无法创建文件。
-
那么你没有编程问题。请在Super User询问。