@kyanny's blog

My thoughts, my life. Views/opinions are my own.

Net::Amazon::S3::Client のほうも使ってみた

確かにこっちのほうがインターフェースが洗練されている。使いやすい。

#!/usr/bin/perl
use strict;
use warnings;
use Net::Amazon::S3;
use Perl6::Say;
use Data::Dumper;
use Config::Pit;

my $config = pit_get('s3.amazonaws.com');

my $s3 = Net::Amazon::S3->new({
    aws_access_key_id => $config->{aws_access_key_id},
    aws_secret_access_key => $config->{aws_secret_access_key},
    retry => 1,
});
my $client = Net::Amazon::S3::Client->new(s3 => $s3);

my @buckets = $client->buckets;
for my $bucket (@buckets) {
    say $bucket->name;
    my $stream = $bucket->list;
    until ($stream->is_done) {
        for my $object ($stream->items) {
            #next if $object->key =~ /^image\./;
            say $object->key;
            say $object->size;
            #say $object->get;
            say $object->uri;
        }
    }
}

ついでにアップロードも試してみた。一回走らせてから、 Firefox addons の S3 Organizer で確認してみる。ちゃんとファイルが作られてる。 URL でアクセスしてみたら access denied だった。 Public 属性をつけないとアップロードしても URL ではアクセスできないとどこかに書いてあったな。それをスクリプトの中でやるには $bucket->object() のときに acl_short => 'public-read' とすればよいみたい。