【问题标题】:FTP directory upload , perlFTP目录上传,perl
【发布时间】:2011-11-27 17:44:43
【问题描述】:

如何将整个文件夹上传到 ftp 服务器? 我正在尝试执行以下操作:

$FTP->binary();
$FTP->mkdir($pfolder);
$FTP->put("$pPath$pfolder");

当然我是在认证之前做的..只是当我运行代码时,会出现以下消息

Cannot open Local file C:\xampp\htdocs\MyProject: Permission denied at projectUpload.pl line 41

-- 编辑--

我找到了解决办法,代码如下:

  sub upload {
          my ( $bpath , $path , $FTP ) = @_;
          $path .= '/' unless $path =~ /\/$/;
          for my $i ( glob ( "$path*" ) ) {
                 $i =~ /(?:\/(.*))/;
                 if ( not -d $i ) {
                        if ( -f $i ) {
                               $FTP->put ( $i , $1 ) ;
                        }      
                 } else {
                        $FTP->mkdir ( $1 ) ;
                        upload ( $bpath , $i , $FTP ) if -d $i ;
                 }
          }
   }

【问题讨论】:

    标签: perl file file-upload ftp


    【解决方案1】:
    • 如果您使用标准的Net::FTP 模块,您必须一次上传一个文件。那里 但是,其他模块允许您上传/镜像整个目录树。

    • 您可能希望转到您在上传文件之前创建的目录。 $FTP->cwd($pfolder); 应该可以解决问题。

    • “权限被拒绝”问题可能是因为MyProject 是一个目录(我猜)。在本地,对该目录执行chdir(),使用opendir() 打开它,然后使用readdir() 遍历文件并一次上传一个文件。

    【讨论】:

    • 对,但是如果 MyProject 中有更多目录呢?
    【解决方案2】:

    如果您尝试上传多个文件/目录,您可能需要查看

    rput ( [FlattenTree => 1] [,RemoveLocalFiles => 1] )
    

    来自Net::FTP::Recursive

    【讨论】: