AWS-S3
view release on metacpan or search on metacpan
lib/AWS/S3/FileIterator.pm view on Meta::CPAN
my $type = 'ListBucket';
my $request = $s->{bucket}->s3->request( $type, %params, bucket => $s->{bucket}->name );
my $response = $request->request();
$s->{has_next} = ( $response->xpc->findvalue( '//s3:IsTruncated' ) || '' ) eq 'true' ? 1 : 0;
my @files = ();
foreach my $node ( $response->xpc->findnodes( '//s3:Contents' ) ) {
my ( $owner_node ) = $response->xpc->findnodes( './/s3:Owner', $node );
my $owner = {
id => $response->xpc->findvalue( './/s3:ID', $owner_node ),
display_name => $response->xpc->findvalue( './/s3:DisplayName', $owner_node )
};
my $etag = $response->xpc->findvalue( './/s3:ETag', $node );
push @files,
{
bucket => $s->{bucket},
key => $response->xpc->findvalue( './/s3:Key', $node ),
lastmodified => $response->xpc->findvalue( './/s3:LastModified', $node ),
etag => $response->xpc->findvalue( './/s3:ETag', $node ),
size => $response->xpc->findvalue( './/s3:Size', $node ),
owner => $owner,
};
} # end foreach()
if ( @files ) {
$s->{marker} = $files[-1]->{key};
} # end if()
return unless defined wantarray;
@files ? return @files : return;
} # end _fetch()
1;
__END__
=pod
=head1 NAME
AWS::S3::FileIterator - Easily access and iterate through your S3 files.
=head1 SYNOPSIS
# Iterate through all ".txt" files, 100 at a time:
my $iter = $bucket->files(
# Required params:
page_size => 100,
page_number => 1,
# Optional params:
pattern => qr(\.txt$),
prefix => 'notes',
);
while( my @files = $iter->next_page )
{
warn $iter->page_number, "\n";
foreach my $file ( @files )
{
print "\t", $file->key, "\n";
}# end foreach()
}# end while()
=head1 DESCRIPTION
AWS::S3::FileIterator provides a means of I<iterating> through your S3 files.
If you only have a few files it might seem odd to require an iterator, but if you
have thousands (or millions) of files, the iterator will save you a lot of effort.
=head1 PUBLIC PROPERTIES
=head2 has_prev
Boolean - read-only
=head2 has_next
Boolean - read-only
=head2 page_number
Integer - read-write
=head2 marker
String - read-only
Used internally to tell Amazon S3 where the last request for a listing of files left off.
=head2 pattern
Regexp - read-only
If supplied to the constructor, only files which match the pattern will be returned.
=head2 prefix
String - read-only
If supplied to the constructor, only files which begin with the indicated prefix will be returned.
=head1 PUBLIC METHODS
=head2 next_page()
Returns the next page of results as an array in list context or arrayref in scalar context.
Increments C<page_number> by one.
=head1 SEE ALSO
L<The Amazon S3 API Documentation|http://docs.amazonwebservices.com/AmazonS3/latest/API/>
L<AWS::S3>
L<AWS::S3::Bucket>
L<AWS::S3::File>
( run in 1.142 second using v1.01-cache-2.11-cpan-5a3173703d6 )