Backblaze-B2V2Client
view release on metacpan or search on metacpan
lib/Backblaze/B2V2Client.pm view on Meta::CPAN
if ($self->{current_status} eq 'OK') {
$self->{bucket_info}{$bucket_name} = {
'upload_url' => $self->{b2_response}{uploadUrl},
'authorization_token' => $self->{b2_response}{authorizationToken},
};
}
# send the status for consistency
return $self->{current_status};
}
# method to get information on one bucket or all buckets
# specify the bucket-name to search by name
sub b2_list_buckets {
my $self = shift;
# optional first arg is a target bucket name
# optional second arg tells us to auto-create a bucket, if the name is provided but it was not found
my ($bucket_name, $auto_create_bucket) = @_;
# send the request
$self->b2_talker(
'url' => $self->{api_url}.'/b2api/v2/b2_list_buckets',
'authorization' => $self->{account_authorization_token},
'post_params' => {
'accountId' => $self->{account_id},
'bucketName' => $bucket_name,
},
);
# if we succeeded, load in all the found buckets to $self->{buckets}
# that will be a hash of info, keyed by name
if ($self->{current_status} eq 'OK') {
foreach my $bucket_info (@{ $self->{b2_response}{buckets} }) {
$bucket_name = $$bucket_info{bucketName};
$self->{buckets}{$bucket_name} = {
'bucket_id' => $$bucket_info{bucketId},
'bucket_type' => $$bucket_info{bucketType},
};
}
} else {
return $self->{current_status};
}
# if that bucket was not found, maybe they want to go ahead and create it?
if ($bucket_name && !$self->{buckets}{$bucket_name} && $auto_create_bucket) {
$self->b2_bucket_maker($bucket_name);
# this will call back to me and get the info
}
return $self->{current_status};
}
# method to retrieve file names / info from a bucket
# this client library is bucket-name-centric, so it looks for the bucket name as a arg
# if there are more than 1000 files, then call this repeatedly
our $B2_MAX_FILE_COUNT = 1000;
sub b2_list_file_names {
my ($self, $bucket_name, %args) = @_;
# bucket_name is required
if (!$bucket_name) {
$self->error_tracker('The bucket_name must be provided for b2_list_file_names().');
return $self->{current_status};
}
# we need the bucket ID
# if we don't have the info for the bucket name, retrieve the bucket's ID
if (ref($self->{buckets}{$bucket_name}) ne 'HASH') {
$self->b2_list_buckets($bucket_name);
}
# retrieve the files
$self->b2_talker(
'url' => $self->{api_url}.'/b2api/v2/b2_list_file_names',
'authorization' => $self->{account_authorization_token},
'post_params' => {
'bucketId' => $self->{buckets}{$bucket_name}{bucket_id},
'prefix' => $args{prefix} // undef,
'delimiter' => $args{delimiter} // undef,
'startFileName' => $args{startFileName} // $self->{buckets}{$bucket_name}{next_file_name},
'maxFileCount' => $args{maxFileCount} // $B2_MAX_FILE_COUNT,
},
);
# if we succeeded, read in the files
if ($self->{current_status} eq 'OK') {
$self->{buckets}{$bucket_name}{next_file_name} = $self->{b2_response}{nextFileName};
# i am not going to waste the CPU cycles de-camelizing these sub-keys
# add to our possibly-started array of file info for this bucket
push(
@{ $self->{buckets}{$bucket_name}{files} },
@{ $self->{b2_response}{files} }
);
# kindly return the request results as a refernce (arrayref)
return $self->{b2_response}{files};
# otherwise, return an error
} else {
return $self->{current_status};
}
}
# method to get info for a specific file
# I assume you have the File ID for the file
sub b2_get_file_info {
my $self = shift;
# required arg is the file ID
my ($file_id) = @_;
( run in 0.642 second using v1.01-cache-2.11-cpan-437f7b0c052 )