gpt4 book ai didi

perl - 使用 perl 获取文件和带前缀的文件并将其上传到 s3

转载 作者:行者123 更新时间:2023-12-01 13:49:48 24 4
gpt4 key购买 nike

我正在尝试使用 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;
}

关于perl - 使用 perl 获取文件和带前缀的文件并将其上传到 s3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32823219/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com