注意

本文档适用于 Ceph 的开发版本。

Perl S3 示例

创建连接

这会创建一个连接,以便您可以与服务器交互。

use Amazon::S3;
my $access_key = 'put your access key here!';
my $secret_key = 'put your secret key here!';

my $conn = Amazon::S3->new({
        aws_access_key_id     => $access_key,
        aws_secret_access_key => $secret_key,
        host                  => 'objects.dreamhost.com',
        secure                => 1,
        retry                 => 1,
});

列出拥有的存储桶

这会获取您拥有的 Amazon::S3::Bucket 对象的列表。我们还将打印出每个存储桶的名称和创建日期。

my @buckets = @{$conn->buckets->{buckets} || []};
foreach my $bucket (@buckets) {
        print $bucket->bucket . "\t" . $bucket->creation_date . "\n";
}

输出将类似于

mahbuckat1   2011-04-21T18:05:39.000Z
mahbuckat2   2011-04-21T18:05:48.000Z
mahbuckat3   2011-04-21T18:07:18.000Z

创建存储桶

这将创建一个名为 my-new-bucket 的新存储桶

my $bucket = $conn->add_bucket({ bucket => 'my-new-bucket' });

列出存储桶的内容

这会获取一个哈希列表,其中包含有关存储桶中每个对象的信息。我们还将打印出每个对象的名称、文件大小和上次修改日期。

my @keys = @{$bucket->list_all->{keys} || []};
foreach my $key (@keys) {
        print "$key->{key}\t$key->{size}\t$key->{last_modified}\n";
}

输出将类似于

myphoto1.jpg 251262  2011-08-08T21:35:48.000Z
myphoto2.jpg 262518  2011-08-08T21:38:01.000Z

删除存储桶

注意

存储桶必须为空!否则它将无法工作!

$conn->delete_bucket($bucket);

强制删除非空存储桶

注意

Amazon::S3 perl 模块中不可用

创建对象

这会创建一个包含字符串 "Hello World!" 的文件 hello.txt

$bucket->add_key(
        'hello.txt', 'Hello World!',
        { content_type => 'text/plain' },
);

更改对象的 ACL

这使得对象 hello.txt 公开可读,而 secret_plans.txt 私有。

$bucket->set_acl({
        key       => 'hello.txt',
        acl_short => 'public-read',
});
$bucket->set_acl({
        key       => 'secret_plans.txt',
        acl_short => 'private',
});

下载对象(到文件)

这会下载对象 perl_poetry.pdf 并将其保存在 /home/larry/documents/

$bucket->get_key_filename('perl_poetry.pdf', undef,
        '/home/larry/documents/perl_poetry.pdf');

删除对象

这会删除对象 goodbye.txt

$bucket->delete_key('goodbye.txt');

生成对象下载 URL(签名和未签名)

这会为 hello.txt 生成一个未签名的下载 URL。这之所以有效,是因为我们通过在上面设置 ACL 使 hello.txt 公开。然后,这会为 secret_plans.txt 生成一个签名的下载 URL,该 URL 将在 1 小时内有效。即使对象是私有的,签名的下载 URL 在该时间段内也会有效(当时间段结束时,URL 将停止工作)。

注意

Amazon::S3 模块没有生成下载 URL 的方法,因此我们将使用另一个模块。不幸的是,大多数用于生成这些 URL 的模块都假定您正在使用 Amazon,因此我们不得不使用一个更冷门的模块 Muck::FS::S3。这应该与 Amazon 的示例 S3 perl 模块相同,但此示例模块不在 CPAN 中。因此,您可以选择使用 CPAN 安装 Muck::FS::S3,或者手动安装 Amazon 的示例 S3 模块。如果您选择手动方式,则可以从下面的示例中删除 Muck::FS::

use Muck::FS::S3::QueryStringAuthGenerator;
my $generator = Muck::FS::S3::QueryStringAuthGenerator->new(
        $access_key,
        $secret_key,
        0, # 0 means use 'http'. set this to 1 for 'https'
        'objects.dreamhost.com',
);

my $hello_url = $generator->make_bare_url($bucket->bucket, 'hello.txt');
print $hello_url . "\n";

$generator->expires_in(3600); # 1 hour = 3600 seconds
my $plans_url = $generator->get($bucket->bucket, 'secret_plans.txt');
print $plans_url . "\n";

输出将类似于

http://objects.dreamhost.com:80/my-bucket-name/hello.txt
http://objects.dreamhost.com:80/my-bucket-name/secret_plans.txt?Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX&Expires=1316027075&AWSAccessKeyId=XXXXXXXXXXXXXXXXXXX

由 Ceph 基金会为您呈现

Ceph 文档是由非营利性 Ceph 基金会 资助和托管的社区资源。如果您希望支持这项工作和我们的其他努力,请考虑 立即加入