NAME `Net::Async::Webservice::S3' - use Amazon's S3 web service with `IO::Async' SYNOPSIS TODO DESCRIPTION This module provides a webservice API around Amazon's S3 web service for use in an IO::Async-based program. Each S3 operation is represented by a method that returns a Future; this future, if successful, will eventually return the result of the operation. PARAMETERS The following named parameters may be passed to `new' or `configure': http => Net::Async::HTTP Optional. Allows the caller to provide a specific asynchronous HTTP user agent object to use. This will be invoked with a single method, as documented by Net::Async::HTTP: $response_f = $http->do_request( request => $request, ... ) If absent, a new instance will be created and added as a child notifier of this object. If a value is supplied, it will be used as supplied and *not* specifically added as a child notifier. In this case, the caller must ensure it gets added to the underlying IO::Async::Loop instance, if required. access_key => STRING secret_key => STRING The twenty-character Access Key ID and forty-character Secret Key to use for authenticating requests to S3. max_retries => INT Optional. Maximum number of times to retry a failed operation. Defaults to 3. list_max_keys => INT Optional. Maximum number of keys at a time to request from S3 for the `list_bucket' method. Larger values may be more efficient as fewer roundtrips will be required per method call. Defaults to 100. METHODS $f = $s3->list_bucket( %args ) Requests a list of the keys in a bucket, optionally within some prefix. Takes the following named arguments: bucket => STR The name of the S3 bucket to query prefix => STR delimiter => STR Optional. If supplied, the prefix and delimiter to use to divide up the key namespace. Keys will be divided on the `delimiter' parameter, and only the key space beginning with the given prefix will be queried. The Future will return two ARRAY references. The first provides a list of the keys found within the given prefix, and the second will return a list of the common prefixes of further nested keys. ( $keys, $prefixes ) = $f->get Each key in the `$keys' list is given in a HASH reference containing key => STRING The key's name last_modified => STRING The last modification time of the key given in ISO 8601 format etag => STRING The entity tag of the key size => INT The size of the key's value, in bytes storage_class => STRING The S3 storage class of the key Each key in the `$prefixes' list is given as a plain string. $f = $s3->get_object( %args ) Requests the value of a key from a bucket. Takes the following named arguments: bucket => STR The name of the S3 bucket to query key => STR The name of the key to query on_chunk => CODE Optional. If supplied, this code will be invoked repeatedly on receipt of more bytes of the key's value. It will be passed an HTTP::Response object containing the key's metadata, and a byte string containing more bytes of the value. Its return value is not important. $on_chunk->( $header, $bytes ) If this is supplied then the key's value will not be accumulated, and the final result of the Future will be an empty string. The Future will return a byte string containing the key's value and the HTTP::Response containing the key's metadata. ( $value, $response ) = $f->get; If an `on_chunk' code reference is passed, this string will be empty. $f = $s3->put_object( %args ) Sets a new value for a key in the bucket. Takes the following named arguments: bucket => STRING The name of the S3 bucket to put the value in key => STRING The name of the key to put the value in value => STRING Optional. If provided, gives a byte string as the new value for the key gen_value => CODE Alternative to `value' in the case of larger values. Called repeatedly to generate successive chunks of the value. Each invocation should return either a string of bytes, or `undef' to indicate completion. value_length => INT If `gen_value' is given instead of `value', this argument must be provided and gives the length of the data that `gen_value' will eventually generate. The Future will return a single string containing the MD5 sum of the newly-set key, as a 32-character hexadecimal string. ( $md5_hex ) = $f->get The returned MD5 sum from S3 will be checked against an internally-generated MD5 sum of the content that was sent, and an error result will be returned if these do not match. $f = $s3->delete_object( %args ) Deletes a key from the bucket. Takes the following named arguments: bucket => STRING The name of the S3 bucket to put the value in key => STRING The name of the key to put the value in The Future will return nothing. SPONSORS Parts of this code were paid for by * Socialflow http://www.socialflow.com * Shadowcat Systems http://www.shadow.cat AUTHOR Paul Evans