Загрузка каталога FTP, perl - PullRequest
1 голос
/ 27 ноября 2011

как я могу загрузить всю папку на 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 ;
                 }
          }
   }

Ответы [ 2 ]

1 голос
/ 27 ноября 2011

Если вы пытаетесь загрузить несколько файлов / каталогов, вы можете взглянуть на

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

из Net::FTP::Recursive

1 голос
/ 27 ноября 2011
  • Если вы используете стандартный модуль Net::FTP, вы должны загружать по одному файлу за раз.Однако есть и другие модули, которые позволяют загружать / зеркалировать целые деревья каталогов.

  • Возможно, вы захотите перейти в созданный вами каталог, прежде чем загружать файлы.$FTP->cwd($pfolder); должен сделать свое дело.

  • Проблема «Отказано в доступе», вероятно, связана с тем, что MyProject является каталогом (я полагаю).Локально, выполните chdir() для этого каталога, откройте его с помощью opendir(), затем переберите файлы с помощью readdir() и загрузите по одному файлу за раз.

...