The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Amazon::S3::Thin - A thin, lightweight, low-level Amazon S3 client

SYNOPSIS

  use Amazon::S3::Thin;

  my $s3client = Amazon::S3::Thin->new(
      {   aws_access_key_id     => $aws_access_key_id,
          aws_secret_access_key => $aws_secret_access_key,
      }
  );

  my $key = "dir/file.txt";
  my $response;
  $response = $s3client->put_object($bucket, $key, "hello world");

  $response = $s3client->get_object($bucket, $key);
  print $response->content; # => "hello world"

  $response = $s3client->delete_object($bucket, $key);

  $response = $s3client->copy_object($src_bucket, $src_key,
                                     $dst_bucket, $dst_key);

  $response = $s3client->list_objects(
                              $bucket,
                              {prefix => "foo", delimter => "/"}
                             );

  $response = $s3client->head_object($bucket, $key);

You can also pass any useragent as you like

  my $s3client = Amazon::S3::Thin->new(
      {   aws_access_key_id     => $aws_access_key_id,
          aws_secret_access_key => $aws_secret_access_key,
          ua                    => $any_LWP_copmatible_useragent,
      }
  );

DESCRIPTION

Amazon::S3::Thin is a thin, lightweight, low-level Amazon S3 client.

It's designed for only ONE purpose: Send a request and get a response.

In detail, it offers the following features:

Low Level

It returns an HTTP::Response object so you can easily inspect what's happening inside, and can handle errors as you like.

Low Dependency

It does not require any XML::* modules, so installation is easy;

Low Learning Cost

The interfaces are designed to follow S3 official REST APIs. So it is easy to learn.

Comparison to precedent modules

There are already some useful modules like Amazon::S3, Net::Amazon::S3 on CPAN. They provide a "Perlish" interface, which looks pretty for Perl programmers, but they also hide low-level behaviors. For example, the "get_key" method translate HTTP status 404 into undef and HTTP 5xx status into exception.

In some situations, it is very important to see the raw HTTP communications. That's why I made this module.

CONSTRUCTOR

new( \%params )

Receives: hashref with options.

Returns: Amazon::S3::Thin object

It can receive the following arguments:

  • aws_access_key_id (REQUIRED) - an access key id of your credentials.

  • aws_secret_access_key (REQUIRED) - an secret access key of your credentials.

  • secure - whether to use https or not. Default is 0 (http).

  • host - the base host to use. Default is 's3.amazonaws.com'.

  • ua - a user agent object, compatible with LWP::UserAgent. Default is an instance of LWP::UserAgent.

ACCESSORS

The following accessors are provided. You can use them to get/set your object's attributes.

secure

Whether to use https (1) or http (0) when connecting to S3.

host

The base host to use for connecting to S3.

ua

The user agent used internally to perform requests and return responses. If you set this attribute, please make sure you do so with an object compatible with LWP::UserAgent (i.e. providing the same interface).

METHODS

get_object( $bucket, $key )

Arguments: a string with the bucket name, and a string with the key name.

Returns: an HTTP::Response object for the request. Use the content() method on the returned object to read the contents:

    my $res = $s3->get_object( 'my.bucket', 'my/key.ext' );

    if ($res->is_success) {
        my $content = $res->content;
    }

The GET operation retrieves an object from Amazon S3.

For more information, please refer to Amazon's documentation for GET.

delete_object( $bucket, $key )

Arguments: a string with the bucket name, and a string with the key name.

Returns: an HTTP::Response object for the request.

The DELETE operation removes the null version (if there is one) of an object and inserts a delete marker, which becomes the current version of the object. If there isn't a null version, Amazon S3 does not remove any objects.

Use the response object to see if it succeeded or not.

For more information, please refer to Amazon's documentation for DELETE.

copy_object( $src_bucket, $src_key, $dst_bucket, $dst_key )

Arguments: a list with source (bucket, key) and destination (bucket, key)

Returns: an HTTP::Response object for the request.

This method is a variation of the PUT operation as described by Amazon's S3 API. It creates a copy of an object that is already stored in Amazon S3. This "PUT copy" operation is the same as performing a GET from the old bucket/key and then a PUT to the new bucket/key.

For more information, please refer to Amazon's documentation for COPY.

put_object( $bucket, $key, $content [, $headers] )

Arguments:

a list of the following items, in order:

1. bucket - a string with the destination bucket
2. key - a string with the destination key
3. content - a string with the content to be uploaded
4. headers (optional) - hashref with extra headr information

Returns: an HTTP::Response object for the request.

The PUT operation adds an object to a bucket. Amazon S3 never adds partial objects; if you receive a success response, Amazon S3 added the entire object to the bucket.

For more information, please refer to Amazon's documentation for PUT.

TODO

lots of APIs are not implemented yet.

REPOSITORY

https://github.com/DQNEO/Amazon-S3-Thin

LICENSE

Copyright (C) DQNEO.

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

AUTHOR

DQNEO

ORIGINAL AUTHOR

Timothy Appnel <tima@cpan.org> Amazon::S3 https://github.com/tima/perl-amazon-s3

SEE ALSO

Amazon::S3, Net::Amazon::S3

Amazon S3 API Reference : REST API

Amazon S3 API Reference : List of Error Codes