This article lists several Perl code examples to interact with DreamObjects.
Creating a Connection
Create a connection so you can interact with the server.
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-us-east-1.dream.io', secure => 1, retry => 1, });
Listing Owned Buckets
Get a list of Amazon::S3::Bucket objects you own and print out the bucket name and creation date of each bucket.
my @buckets = @{$conn->buckets->{buckets} || []}; foreach my $bucket (@buckets) { print $bucket->bucket . "\t" . $bucket->creation_date . "\n"; }
The output will look something like this:
mahbuckat1 2011-04-21T18:05:39.000Z mahbuckat2 2011-04-21T18:05:48.000Z mahbuckat3 2011-04-21T18:07:18.000Z
Creating a Bucket
Create a new bucket called my-new-bucket.
my $bucket = $conn->add_bucket({ bucket => 'my-new-bucket' });
Listing a Bucket’s Content
Get a list of hashes with info about each object in the bucket and print out each object’s name, the file size, and last modified date.
my @keys = @{$bucket->list_all->{keys} || []}; foreach my $key (@keys) { print "$key->{key}\t$key->{size}\t$key->{last_modified}\n"; }
The output will look something like this:
myphoto1.jpg 251262 2011-08-08T21:35:48.000Z myphoto2.jpg 262518 2011-08-08T21:38:01.000Z
Deleting a Bucket
The Bucket must be empty, otherwise it won’t work.
$conn->delete_bucket($bucket);
Forced Delete for Non-empty Buckets
not available in the Amazon::S3 perl module
Creating an Object
Create a file hello.txt
with the string "Hello World!"
$bucket->add_key( 'hello.txt', 'Hello World!', { content_type => 'text/plain' }, );
Change an Object’s ACL
Make the object hello.txt
publicly readable and secret_plans.txt
to be private.
$bucket->set_acl({ key => 'hello.txt', acl_short => 'public-read', }); $bucket->set_acl({ key => 'secret_plans.txt', acl_short => 'private', });
Download an Object (to a file)
Download the object perl_poetry.pdf and save it in /home/username/documents/. Make sure to change username to your Shell user.
$bucket->get_key_filename('perl_poetry.pdf', undef,
'/home/username/documents/perl_poetry.pdf');
Delete an Object
Delete the object goodbye.txt.
$bucket->delete_key('goodbye.txt');
Generate Object Download URLs (signed and unsigned)
This generates an unsigned download URL for hello.txt
. This works because hello.txt
was made public by setting the ACL above. Then this generates a signed download URL for secret_plans.txt
that will work for 1 hour. Signed download URLs will work for the time period even if the object is private (when the time period is up, the URL will stop working).
The Amazon::S3 module does not have a way to generate download URLs, so these examples use another module instead. Unfortunately, most modules for generating these URLs assume that you are using Amazon. For this reason, a more obscure module, Muck::FS::S3 is used. This should be the same as Amazon’s sample S3 perl module, but this sample module is not in CPAN. So, you can either use CPAN to install Muck::FS::S3, or install Amazon’s sample S3 module manually. If you go the manual route, you can remove Muck::FS::
from the example below.
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-us-east-1.dream.io', ); 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";
The output will look something like this:
https://objects-us-east-1.dream.io:80/my-bucket-name/hello.txt https://objects-us-east-1.dream.io:80/my-bucket-name/secret_plans.txt?Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX&Expires=1316027075&AWSAccessKeyId=XXXXXXXXXXXXXXXXXXX