使用perl获取和上传文件和前缀文件到s3



我试图在Perl中使用Amazon::S3模块从s3获取文件。我能够成功下载没有前缀的文件,但无法获取像test/abc.txt这样的前缀文件。

我使用下面的代码。

sub export_bucket {
  my ($conn, $bucket, $directory) = @_;
  $bucket = $conn->bucket($bucket);
  my $response = $bucket->list();
  print $response->{bucket}."n";
  for my $key (@{ $response->{keys} }) {
        print "t".$key->{key}."n";  
        _export_file($conn,$bucket,$key->{key}, $directory.'/'.$key->{key});
  }
}
sub _export_file {
  my ($conn,$bucket,$name,$path) = @_;
  print "Downloading $name file","n";
  my $test = $bucket->get_key_filename($name,'GET',$path);
  print Dumper($test);
  my $acl = $bucket->get_acl($name);
  print Dumper($acl);
  open my $acl_file, '>', $path.'.acl';
  print $acl_file $acl;
  close $acl_file;
}

建议我应该做什么改变,这样当一个前缀/文件夹来的时候,我应该能够下载这个文件夹。

谢谢

如果目标目录不存在,则需要修改代码以在本地文件系统上创建目标目录。它应该看起来像这样:

use File::Path qw[make_path];
sub export_bucket {
    my ( $conn, $bucket, $directory ) = @_;
    $bucket = $conn->bucket($bucket);
    my $response = $bucket->list();
    print $response->{bucket} . "n";
    for my $key ( @{ $response->{keys} } ) {
        print "t" . $key->{key} . "n";
        _export_file( $conn, $bucket, $key->{key}, $directory . '/' . $key->{key} );
    }
}
sub _export_file {
    my ( $conn, $bucket, $name, $path ) = @_;
    print "Downloading $name file", "n";
    my $test = $bucket->get_key_filename( $name, 'GET', $path );
    print Dumper($test);
    my $acl = $bucket->get_acl($name);
    print Dumper($acl);
    ## get path directory part
    my ($dir_part) = $path =~ /(.+)/[^/]+$/;
    unless ( -d $dir_part ) {
        make_path($dir_part);
    }
    open my $acl_file, '>', $path . '.acl';
    print $acl_file $acl;
    close $acl_file;
}

也许$directory已经在失败的情况下尾随"/"(或$key->{key}有前面的斜杠)?试着调试打印代码中的$directory和$path,看看你的字符串参数到底是什么。

最新更新