NAME
    Net::UpYun - Simple client library for UpYun Restful API.

SYNOPSIS
        # Yes, I love modern perl!
        use v5.12;
        use Net::UpYun;
    
        my $upyun = Net::UpYun->new(
            bucket_account => 'xxxxx',
            bucket_password => 'xxxx',
            bucket => 'bucket_name',
            # optional
            api_domain => 'http://v0.api.upyun.com',
        );

        # get bucket/folder/file usage
        my $usage = $upyun->usage;
        # or folder/file
        say $upyun->usage('/demo');

        # switch bucket
        $upyun->use_bucket('bucket_new');
        # use different account/password
        $upyun->use_bucket('bucket_new',$new_account,$new_password);

        # create dir
        my $ok = $upyun->mkdir('/demo2');

        # list file under the directory
        my $files = $upyun->list('/demo2');

        # rm dir
        my $ok = $upyun->rmdir('/demo2');

        # upload file
        my $ok = $upyun->put($file_key,$file_bytes);

        # get file content
        my $bytes = $upyun->get($file_key);

        # delete file
        $upyun->delete($file_key);

        # change api domaim
        $upyun->api_domain('http://v1.api.upyun.com');

DESCRIPTION
    This module provides very simple interfaces to UpYun Cloud servie,for
    more details about UpYun storage/CDN clound service, see
    <http://www.upyun.com/>.

    This module uses WWW::Curl and libcurl for best performance, I just test
    on Mac Lion and Linux, maybe works on Windows/Cygwin.

METHODS
  new()
    bucket
    bucket_account
    bucket_password
    api_domain

  usage($path)
        # whole bucket used storage
        $upyun->usage;
        # some dir/folder
        say $upyun->usage('/dir1');
        # some file size
        say $upyun->usage('/dir1/demo1.jpg');

    List bucket or path(folder or file) used space.

  use_bucket($new_bucket_name,$new_account?,$new_password?)
        # switch to new bucket,account/password same as current
        $upyun->use_bucket('bucket2');
        # switch to new bucket, also set new account/password
        $upyun->use_bucket('bucket3','new_user','new_password');

    Switch to another bucket, if omit new_account,new_password, use previous
    defined.

  mkdir($path)
        my $ok = $upyun->mkdir('/path1/path2');

    Build directory or path.

  rmdir($path)
        my $ok = $upyun->rmdir('/path1');

    Delete the directory, it must be empty.

  list($path)
        my $dir_content_str = $upyun->list('/');

    List files under the directory.

    TODO: $dir_content_str is plain text, need to parse.

  put($path,$bytes)
        # it will auto mkdir.
        my $ok = $upyun->put('/demo/1.txt','okokok');

    Upload content to the file, it will auto create directories.

    NOTE: According UpYun note, max directories deep level is limited to 10,
    be careful.

  get($path)
        say $upyun->get('/demo/1.txt');

    Get the file content.

  delete($path)
        my $ok = $upyun->delete('/demo/1.txt');

    Delete the file.

  reponse
        my $http_response = $upyun->response;

    Returns latest response,it's an instance of HTTP::Response.

  res_content
    Raw response content body.

  is_success
  is_error
    These methods indicate if the response was informational, successful, or
    an error. If the response code was 2xx code, is_success is true, else
    is_error is true.

  error_code
    The code is a 3 digit number that encode the overall outcome of the last
    HTTP response.

  error_message
    The message is a short human readable single line string that explains
    the last response code.

  do_request
    Internal, send signed request to server.

  sign
    Private.

TODOS
    Much jobs to do.

    *   handy client shell.

    *   copy/move file under same bucket or between different bucket.

    *   simple check file exists on remote ,no need to fetch its
        content,save bandwidth.

    *   display/compare files checksum(MD5) local and remote.

    *   streaming upload to save memory.

    *   useful utility, like tar/untar to/from upyun on fly.

    *   multi operation and performance requests in parallel.

    *   code clean and refactory.

AUTHOR
    Night Sailer(Pan Fan) <nightsailer{at}gmail_dot_com>

COPYRIGHT
    Copyright (C) Pan Fan(nightsailer)

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

