NAME Mojolicious::Plugin::Cloudinary - Talk with cloudinary.com VERSION 0.02 DESCRIPTION This module lets you interface to . Its primary target is to be a Mojolicious plugin, but it can also be used as a generic module - just skip calling "register". SYNOPSIS With mojolicious package MyWebApp; use Mojo::Base 'Mojolicious'; sub startup { my $self = shift; $self->plugin('Mojolicious::Plugin::Cloudinary', { cloud_name => $str, api_key => $str, api_secret => $str, }); } package MyWebApp::SomeController; sub upload { my $self = shift; $self->render_later; $self->cloudinary_upload({ file => $self->param('upload_param'), on_success => sub { my $res = shift; $self->render_json($res); }, on_error => sub { my $res = shift || { error => 'Unknown' }; $self->render_json($res); }, }); } Standalone my $delay = Mojo::IOLoop->delay; my $cloudinary = Mojolicious::Plugin::Cloudinary->new( cloud_name => '...', api_key => '...', api_secret => '...', ); $delay->begin; $cloudinary->upload({ file => { file => $path_to_file }, on_success => sub { # ... $delay->end; }, on_error => sub { # ... $delay->end; }, }); # let's you do multiple upload() in parallel # just call $delay->begin once pr upload() # and $delay->end in each on_xxx callback $delay->wait; ATTRIBUTES cloud_name Your cloud name from api_key Your API key from api_secret Your API secret from private_cdn Your private CDN url from . METHODS upload $self->upload({ file => $binary_str|$url, # required timestamp => $epoch, # time() public_id => $str, # optional format => $str, # optional tags => ['foo', 'bar'], # optional on_success => sub { my($res) = @_; # ... }, on_error => sub { my($res, $tx) = @_; # ... }, }); Will upload a file to using the parameters given "cloud_name" "api_key" and "api_secret". The "file" can be: * A hash { file => 'path/to/image' } * A Mojo::Upload object. * A Mojo::Asset object. * A URL "res" in callbacks will be the JSON response from as a hash ref. It may also be "undef" if something went wrong with the actual HTTP POST. See also . destroy $self->destroy({ public_id => $public_id, on_success => sub { my($res) = @_; # ... }, on_error => sub { my($res, $tx) = @_; # ... }, }); Will delete an image from cloudinary, identified by $public_id. url_for $url_obj = $self->url_for("$public_id.$format", \%args); This method will return a public URL to the image at . It will use "private_cdn" or the public CDN and "cloud_name" to construct the URL. The return value is a Mojo::URL object. Example %args: { w => 100, # width of image h => 150, # height of image secure => $bool, # use private_cdn or public cdn } register Adds the helpers to your controller: * cloudinary_upload * cloudinary_destroy See "upload". * cloudinary_url_for See "url_for". COPYRIGHT & LICENSE See Oppstarter AUTHOR Jan Henning Thorsen - jan.henning@oppstarter.no