README.md in cos-0.1.0 vs README.md in cos-0.1.1
- old
+ new
@@ -1,36 +1,2033 @@
-# Cos
+# Tencent COS Ruby SDK
-Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/cos`. To experiment with that code, run `bin/console` for an interactive prompt.
+[![Gem Version](https://badge.fury.io/rb/cos.svg)](https://badge.fury.io/rb/cos) [![Dependency Status](https://gemnasium.com/bfcd58e8c449a47dcf4bd15e35806dc8.svg)](https://gemnasium.com/RaymondChou/cos-ruby-sdk) [![Code Climate](https://codeclimate.com/repos/5690d89cb1a7430e970051c5/badges/e1ec353330a7f9bb90a1/gpa.svg)](https://codeclimate.com/repos/5690d89cb1a7430e970051c5/feed) [![Build Status](https://travis-ci.com/RaymondChou/cos-ruby-sdk.svg?token=J7GcZgoty9nseAGRShu5&branch=master)](https://travis-ci.com/RaymondChou/cos-ruby-sdk) [![Test Coverage](https://codeclimate.com/repos/5690d89cb1a7430e970051c5/badges/e1ec353330a7f9bb90a1/coverage.svg)](https://codeclimate.com/repos/5690d89cb1a7430e970051c5/coverage)
-TODO: Delete this and the text above, and describe your gem
+[![Gitter](https://badges.gitter.im/RaymondChou/cos-ruby-sdk.svg)](https://gitter.im/RaymondChou/cos-ruby-sdk?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) [![Gem Downloads](http://ruby-gem-downloads-badge.herokuapp.com/cos?type=total)](https://rubygems.org/gems/cos) [![Github Code](http://img.shields.io/badge/github-code-blue.svg)](https://github.com/RaymondChou/cos-ruby-sdk) [![Yard Docs](http://img.shields.io/badge/yard-docs-blue.svg)](http://rubydoc.info/github/RaymondChou/cos-ruby-sdk)
-## Installation
-Add this line to your application's Gemfile:
-```ruby
+-----
+
+Tencent🐧 COS(Cloud Object Service) SDK for Ruby [腾讯云对象存储服务](http://wiki.qcloud.com/wiki/COS%E4%BA%A7%E5%93%81%E4%BB%8B%E7%BB%8D)
+
+- 100%实现COS官方Restful API
+
+- 符合Ruby使用习惯的链式操作
+
+- 支持HTTPS
+
+- 支持大文件自动多线程分片断点续传上传、下载
+
+- 支持Rails
+
+- 提供便捷的CLI工具:
+
+ ![CLI示例](http://mytest-10016219.file.myqcloud.com/out2.gif)
+
+**目录**
+
+- [Tencent COS Ruby SDK](#tencent-cos-ruby-sdk)
+ - [1 运行环境](#1-%E8%BF%90%E8%A1%8C%E7%8E%AF%E5%A2%83)
+ - [2 安装SDK](#2-%E5%AE%89%E8%A3%85sdk)
+ - [3 快速入门](#3-%E5%BF%AB%E9%80%9F%E5%85%A5%E9%97%A8)
+ - [3.1 准备工作](#31-%E5%87%86%E5%A4%87%E5%B7%A5%E4%BD%9C)
+ - [3.2 初始化](#32-%E5%88%9D%E5%A7%8B%E5%8C%96)
+ - [3.3 指定Bucket](#33-%E6%8C%87%E5%AE%9Abucket)
+ - [3.4 目录操作示例](#34-%E7%9B%AE%E5%BD%95%E6%93%8D%E4%BD%9C%E7%A4%BA%E4%BE%8B)
+ - [3.5 文件操作示例](#35-%E6%96%87%E4%BB%B6%E6%93%8D%E4%BD%9C%E7%A4%BA%E4%BE%8B)
+ - [4 SDK详细说明](#4-sdk%E8%AF%A6%E7%BB%86%E8%AF%B4%E6%98%8E)
+ - [4.1 初始化与配置](#41-%E5%88%9D%E5%A7%8B%E5%8C%96%E4%B8%8E%E9%85%8D%E7%BD%AE)
+ - [4.2 指定Bucket](#42-%E6%8C%87%E5%AE%9Abucket)
+ - [4.3 Bucket操作(COS::Bucket)](#43-bucket%E6%93%8D%E4%BD%9C%EF%BC%88cosbucket%EF%BC%89)
+ - [4.3.1 获取Bucket属性](#431-%E8%8E%B7%E5%8F%96bucket%E5%B1%9E%E6%80%A7)
+ - [4.3.2 创建目录(create_folder,mkdir)](#432-%E5%88%9B%E5%BB%BA%E7%9B%AE%E5%BD%95%EF%BC%88create_folder%EF%BC%8Cmkdir%EF%BC%89)
+ - [4.3.3 列举目录(list,ls)](#433-%E5%88%97%E4%B8%BE%E7%9B%AE%E5%BD%95%EF%BC%88list%EF%BC%8Cls%EF%BC%89)
+ - [4.3.4 上传文件(upload)](#434-%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6%EF%BC%88upload%EF%BC%89)
+ - [4.3.4 资源属性(stat)](#434-%E8%B5%84%E6%BA%90%E5%B1%9E%E6%80%A7%EF%BC%88stat%EF%BC%89)
+ - [4.3.5 更新资源属性(upadte)](#435-%E6%9B%B4%E6%96%B0%E8%B5%84%E6%BA%90%E5%B1%9E%E6%80%A7%EF%BC%88upadte%EF%BC%89)
+ - [4.3.6 删除资源(delete)](#436-%E5%88%A0%E9%99%A4%E8%B5%84%E6%BA%90%EF%BC%88delete%EF%BC%89)
+ - [4.3.7 删除资源(无异常)(delete!)](#437-%E5%88%A0%E9%99%A4%E8%B5%84%E6%BA%90%EF%BC%88%E6%97%A0%E5%BC%82%E5%B8%B8%EF%BC%89%EF%BC%88delete%EF%BC%89)
+ - [4.3.8 判断目录是否为空(empty?)](#438-%E5%88%A4%E6%96%AD%E7%9B%AE%E5%BD%95%E6%98%AF%E5%90%A6%E4%B8%BA%E7%A9%BA%EF%BC%88empty%EF%BC%89)
+ - [4.3.9 判断资源是否存在(exist?,exists?)](#439-%E5%88%A4%E6%96%AD%E8%B5%84%E6%BA%90%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8%EF%BC%88exist%EF%BC%8Cexists%EF%BC%89)
+ - [4.3.9 判断文件是否上传完成(complete?)](#439-%E5%88%A4%E6%96%AD%E6%96%87%E4%BB%B6%E6%98%AF%E5%90%A6%E4%B8%8A%E4%BC%A0%E5%AE%8C%E6%88%90%EF%BC%88complete%EF%BC%89)
+ - [4.3.10 获取文件的访问URL(url)](#4310-%E8%8E%B7%E5%8F%96%E6%96%87%E4%BB%B6%E7%9A%84%E8%AE%BF%E9%97%AEurl%EF%BC%88url%EF%BC%89)
+ - [4.3.11 下载文件(download)](#4311-%E4%B8%8B%E8%BD%BD%E6%96%87%E4%BB%B6%EF%BC%88download%EF%BC%89)
+ - [4.3.12 获取Object树形结构(tree)](#4312-%E8%8E%B7%E5%8F%96object%E6%A0%91%E5%BD%A2%E7%BB%93%E6%9E%84%EF%BC%88tree%EF%BC%89)
+ - [4.3.13 获取Hash树形结构(hash_tree)](#4313-%E8%8E%B7%E5%8F%96hash%E6%A0%91%E5%BD%A2%E7%BB%93%E6%9E%84%EF%BC%88hash_tree%EF%BC%89)
+ - [4.3.14 批量下载目录下的所有文件(download_all)](#4314-%E6%89%B9%E9%87%8F%E4%B8%8B%E8%BD%BD%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%EF%BC%88download_all%EF%BC%89)
+ - [4.3.15 批量上传目录中的所有文件(upload_all)](#4315-%E6%89%B9%E9%87%8F%E4%B8%8A%E4%BC%A0%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%EF%BC%88upload_all%EF%BC%89)
+ - [4.3.16 获取资源个数详情(支持前缀搜索)(list_count)](#4316-%E8%8E%B7%E5%8F%96%E8%B5%84%E6%BA%90%E4%B8%AA%E6%95%B0%E8%AF%A6%E6%83%85%EF%BC%88%E6%94%AF%E6%8C%81%E5%89%8D%E7%BC%80%E6%90%9C%E7%B4%A2%EF%BC%89%EF%BC%88list_count%EF%BC%89)
+ - [4.3.17 获取资源个数(count, size)](#4317-%E8%8E%B7%E5%8F%96%E8%B5%84%E6%BA%90%E4%B8%AA%E6%95%B0%EF%BC%88count-size%EF%BC%89)
+ - [4.3.18 获取文件个数(count_files)](#4318-%E8%8E%B7%E5%8F%96%E6%96%87%E4%BB%B6%E4%B8%AA%E6%95%B0%EF%BC%88count_files%EF%BC%89)
+ - [4.3.19 获取目录个数(count_dirs)](#4319-%E8%8E%B7%E5%8F%96%E7%9B%AE%E5%BD%95%E4%B8%AA%E6%95%B0%EF%BC%88count_dirs%EF%BC%89)
+ - [4.4 资源操作](#44-%E8%B5%84%E6%BA%90%E6%93%8D%E4%BD%9C)
+ - [4.4.1 文件操作(COS::COSFile)](#441-%E6%96%87%E4%BB%B6%E6%93%8D%E4%BD%9C%EF%BC%88coscosfile%EF%BC%89)
+ - [4.4.1.1 获取文件属性](#4411-%E8%8E%B7%E5%8F%96%E6%96%87%E4%BB%B6%E5%B1%9E%E6%80%A7)
+ - [4.4.1.2 获取当前文件属性(刷新)(stat)](#4412-%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%E6%96%87%E4%BB%B6%E5%B1%9E%E6%80%A7%EF%BC%88%E5%88%B7%E6%96%B0%EF%BC%89%EF%BC%88stat%EF%BC%89)
+ - [4.4.1.3 更新当前文件属性(upadte)](#4413-%E6%9B%B4%E6%96%B0%E5%BD%93%E5%89%8D%E6%96%87%E4%BB%B6%E5%B1%9E%E6%80%A7%EF%BC%88upadte%EF%BC%89)
+ - [4.4.1.4 删除当前文件(delete)](#4414-%E5%88%A0%E9%99%A4%E5%BD%93%E5%89%8D%E6%96%87%E4%BB%B6%EF%BC%88delete%EF%BC%89)
+ - [4.4.1.5 删除当前文件(无异常)(delete!)](#4415-%E5%88%A0%E9%99%A4%E5%BD%93%E5%89%8D%E6%96%87%E4%BB%B6%EF%BC%88%E6%97%A0%E5%BC%82%E5%B8%B8%EF%BC%89%EF%BC%88delete%EF%BC%89)
+ - [4.4.1.6 判断当前文件是否存在(exist?,exists?)](#4416-%E5%88%A4%E6%96%AD%E5%BD%93%E5%89%8D%E6%96%87%E4%BB%B6%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8%EF%BC%88exist%EF%BC%8Cexists%EF%BC%89)
+ - [4.4.1.7 判断当前文件是否上传完成(complete?)](#4417-%E5%88%A4%E6%96%AD%E5%BD%93%E5%89%8D%E6%96%87%E4%BB%B6%E6%98%AF%E5%90%A6%E4%B8%8A%E4%BC%A0%E5%AE%8C%E6%88%90%EF%BC%88complete%EF%BC%89)
+ - [4.4.1.8 获取当前文件的访问URL(url)](#4418-%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%E6%96%87%E4%BB%B6%E7%9A%84%E8%AE%BF%E9%97%AEurl%EF%BC%88url%EF%BC%89)
+ - [4.4.1.9 下载当前文件(download)](#4419-%E4%B8%8B%E8%BD%BD%E5%BD%93%E5%89%8D%E6%96%87%E4%BB%B6%EF%BC%88download%EF%BC%89)
+ - [4.4.1.10 判断当前文件与本地文件是否相同](#44110-%E5%88%A4%E6%96%AD%E5%BD%93%E5%89%8D%E6%96%87%E4%BB%B6%E4%B8%8E%E6%9C%AC%E5%9C%B0%E6%96%87%E4%BB%B6%E6%98%AF%E5%90%A6%E7%9B%B8%E5%90%8C)
+ - [4.4.2 目录操作(COS::COSDir)](#442-%E7%9B%AE%E5%BD%95%E6%93%8D%E4%BD%9C%EF%BC%88coscosdir%EF%BC%89)
+ - [4.4.2.1 获取目录属性](#4421-%E8%8E%B7%E5%8F%96%E7%9B%AE%E5%BD%95%E5%B1%9E%E6%80%A7)
+ - [4.4.2.2 列举当前目录(前缀搜索)(list,ls)](#4422-%E5%88%97%E4%B8%BE%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%EF%BC%88%E5%89%8D%E7%BC%80%E6%90%9C%E7%B4%A2%EF%BC%89%EF%BC%88list%EF%BC%8Cls%EF%BC%89)
+ - [4.4.2.3 创建子目录(create_folder,mkdir)](#4423-%E5%88%9B%E5%BB%BA%E5%AD%90%E7%9B%AE%E5%BD%95%EF%BC%88create_folder%EF%BC%8Cmkdir%EF%BC%89)
+ - [4.4.2.4 上传文件至当前目录(upload)](#4424-%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6%E8%87%B3%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%EF%BC%88upload%EF%BC%89)
+ - [4.4.2.5 批量上传本地目录中的所有文件至当前目录(upload_all)](#4425-%E6%89%B9%E9%87%8F%E4%B8%8A%E4%BC%A0%E6%9C%AC%E5%9C%B0%E7%9B%AE%E5%BD%95%E4%B8%AD%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%E8%87%B3%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%EF%BC%88upload_all%EF%BC%89)
+ - [4.4.2.6 批量下载当前目录下的所有文件(download_all)](#4426-%E6%89%B9%E9%87%8F%E4%B8%8B%E8%BD%BD%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84%E6%89%80%E6%9C%89%E6%96%87%E4%BB%B6%EF%BC%88download_all%EF%BC%89)
+ - [4.4.2.7 当前目录属性(刷新)(stat)](#4427-%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E5%B1%9E%E6%80%A7%EF%BC%88%E5%88%B7%E6%96%B0%EF%BC%89%EF%BC%88stat%EF%BC%89)
+ - [4.4.2.8 更新当前目录属性(upadte)](#4428-%E6%9B%B4%E6%96%B0%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E5%B1%9E%E6%80%A7%EF%BC%88upadte%EF%BC%89)
+ - [4.4.2.9 删除当前目录(delete)](#4429-%E5%88%A0%E9%99%A4%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%EF%BC%88delete%EF%BC%89)
+ - [4.4.2.10 删除当前目录(无异常)(delete!)](#44210-%E5%88%A0%E9%99%A4%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%EF%BC%88%E6%97%A0%E5%BC%82%E5%B8%B8%EF%BC%89%EF%BC%88delete%EF%BC%89)
+ - [4.4.2.11 判断当前目录是否为空(empty?)](#44211-%E5%88%A4%E6%96%AD%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E6%98%AF%E5%90%A6%E4%B8%BA%E7%A9%BA%EF%BC%88empty%EF%BC%89)
+ - [4.4.2.12 判断当前目录是否存在(exist?,exists?)](#44212-%E5%88%A4%E6%96%AD%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E6%98%AF%E5%90%A6%E5%AD%98%E5%9C%A8%EF%BC%88exist%EF%BC%8Cexists%EF%BC%89)
+ - [4.4.2.13 获取当前目录下的Object树形结构(tree)](#44213-%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84object%E6%A0%91%E5%BD%A2%E7%BB%93%E6%9E%84%EF%BC%88tree%EF%BC%89)
+ - [4.4.2.14 获取当前目录下的Hash树形结构(hash_tree)](#44214-%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84hash%E6%A0%91%E5%BD%A2%E7%BB%93%E6%9E%84%EF%BC%88hash_tree%EF%BC%89)
+ - [4.4.2.15 获取当前目录下的资源个数详情(支持前缀搜索)(list_count)](#44215-%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84%E8%B5%84%E6%BA%90%E4%B8%AA%E6%95%B0%E8%AF%A6%E6%83%85%EF%BC%88%E6%94%AF%E6%8C%81%E5%89%8D%E7%BC%80%E6%90%9C%E7%B4%A2%EF%BC%89%EF%BC%88list_count%EF%BC%89)
+ - [4.4.2.16 获取当前目录下的资源个数(count, size)](#44216-%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84%E8%B5%84%E6%BA%90%E4%B8%AA%E6%95%B0%EF%BC%88count-size%EF%BC%89)
+ - [4.4.2.17 获取当前目录下的文件个数(count_files)](#44217-%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84%E6%96%87%E4%BB%B6%E4%B8%AA%E6%95%B0%EF%BC%88count_files%EF%BC%89)
+ - [4.4.2.18 获取当前目录下的子目录个数(count_dirs)](#44218-%E8%8E%B7%E5%8F%96%E5%BD%93%E5%89%8D%E7%9B%AE%E5%BD%95%E4%B8%8B%E7%9A%84%E5%AD%90%E7%9B%AE%E5%BD%95%E4%B8%AA%E6%95%B0%EF%BC%88count_dirs%EF%BC%89)
+ - [4.5 签名操作(COS::Signature)](#45-%E7%AD%BE%E5%90%8D%E6%93%8D%E4%BD%9C%EF%BC%88cossignature%EF%BC%89)
+ - [4.5.1 获取单次有效签名(once)](#451-%E8%8E%B7%E5%8F%96%E5%8D%95%E6%AC%A1%E6%9C%89%E6%95%88%E7%AD%BE%E5%90%8D%EF%BC%88once%EF%BC%89)
+ - [4.5.2 获取多次有效签名(multiple)](#452-%E8%8E%B7%E5%8F%96%E5%A4%9A%E6%AC%A1%E6%9C%89%E6%95%88%E7%AD%BE%E5%90%8D%EF%BC%88multiple%EF%BC%89)
+ - [5 底层API(COS::API)](#5-%E5%BA%95%E5%B1%82api%EF%BC%88cosapi%EF%BC%89)
+ - [5.1 创建目录(create_folder)](#51-%E5%88%9B%E5%BB%BA%E7%9B%AE%E5%BD%95create_folder)
+ - [5.2 目录列表(前缀搜索)(list)](#52-%E7%9B%AE%E5%BD%95%E5%88%97%E8%A1%A8%EF%BC%88%E5%89%8D%E7%BC%80%E6%90%9C%E7%B4%A2%EF%BC%89list)
+ - [5.3 上传文件(完整上传)(upload)](#53-%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6%EF%BC%88%E5%AE%8C%E6%95%B4%E4%B8%8A%E4%BC%A0%EF%BC%89upload)
+ - [5.4 上传文件(分片上传)(upload_slice)](#54-%E4%B8%8A%E4%BC%A0%E6%96%87%E4%BB%B6%EF%BC%88%E5%88%86%E7%89%87%E4%B8%8A%E4%BC%A0%EF%BC%89upload_slice)
+ - [5.5 更新文件、目录属性(update)](#55-%E6%9B%B4%E6%96%B0%E6%96%87%E4%BB%B6%E3%80%81%E7%9B%AE%E5%BD%95%E5%B1%9E%E6%80%A7update)
+ - [5.6 删除文件、目录(delete)](#56-%E5%88%A0%E9%99%A4%E6%96%87%E4%BB%B6%E3%80%81%E7%9B%AE%E5%BD%95delete)
+ - [5.7 获取文件或目录属性(stat)](#57-%E8%8E%B7%E5%8F%96%E6%96%87%E4%BB%B6%E6%88%96%E7%9B%AE%E5%BD%95%E5%B1%9E%E6%80%A7stat)
+ - [5.8下载文件](#58%E4%B8%8B%E8%BD%BD%E6%96%87%E4%BB%B6)
+ - [6 CLI命令行工具](#6-cli%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%B7%A5%E5%85%B7)
+ - [7 运行测试](#7-%E8%BF%90%E8%A1%8C%E6%B5%8B%E8%AF%95)
+
+## 1 运行环境
+
+- Ruby版本:MRI >= 1.9.3, JRuby >= 1.9
+- 操作系统:Windows/Linux/OS X
+
+## 2 安装SDK
+
+添加至应用程序的Gemfile文件:
+
+``` ruby
gem 'cos'
```
-And then execute:
+然后执行:
- $ bundle
+```
+$ bundle
+```
-Or install it yourself as:
+或手动安装gem:
- $ gem install cos
+```
+$ gem install cos
+```
-## Usage
+## 3 快速入门
-TODO: Write usage instructions here
+### 3.1 准备工作
-## Development
+在[腾讯云COS控制台](http://console.qcloud.com/cos)创建Bucket并获取您的`app_id` `secret_id` `secret_key`
-After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
+🔍具体操作可参考[COS控制台使用说明](http://www.qcloud.com/wiki/COS%E6%8E%A7%E5%88%B6%E5%8F%B0%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E)
-To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
+### 3.2 初始化
-## Contributing
+``` ruby
+require 'cos'
-Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/cos.
+client = COS::Client.new({
+ app_id: 'your_app_id',
+ secret_id: 'your_secret_id',
+ secret_key: 'your_secret_key',
+ protocol: 'https' # 使用https
+})
+```
+更多初始化参数及加载方式请见:4.1 初始化与配置
+
+### 3.3 指定Bucket
+
+``` ruby
+bucket = client.bucket('your_bucket_name')
+```
+
+🎉【Tip】你也可以在初始化Client时通过`default_bucket`参数设置默认的Bucket:
+
+``` ruby
+client = COS::Client.new({
+ app_id: 'your_app_id',
+ secret_id: 'your_secret_id',
+ secret_key: 'your_secret_key',
+ defualt_bucket: 'your_default_bucket',
+})
+# 取得默认Bucket
+bucket = client.bucket
+```
+
+### 3.4 目录操作示例
+
+``` ruby
+# 列举bucket根目录中的文件与目录
+bucket.list do |res|
+ if res.is_a?(COS::COSDir) # 或 res.type == 'dir'
+ puts "Dir:#{res.name} #{res.biz_attr}"
+ # 设置目录属性
+ res.update('属性1')
+ else
+ # 文件 COS::COSFile 或 res.type == 'file'
+ puts "File:#{res.name}"
+ # 输出Hash参数
+ puts res.to_hash
+ end
+end
+
+# 可以按路径列出资源
+bucket.list('/path/path2/') { |r| puts r.name }
+
+# 只列出文件
+bucket.list('/path/path2/', :pattern => :only_file) { |r| puts r.name }
+
+# 倒序只列出目录
+bucket.list('/path/path2/', :pattern => :only_dir, :order => :desc) { |r| puts r.name }
+
+# 获取bucket信息
+b = bucket.stat
+puts b.refers
+
+# 判断目录是否存在
+puts bucket.exist?('dir')
+# 获取目录信息
+dir = bucket.stat('dir')
+# 创建时间修改时间
+puts dir.created_at
+puts dir.updated_at
+# 判断目录是否是空的
+puts dir.empty?
+# 目录中的文件及目录总数
+puts dir.count
+# 目录中的文件总数
+puts dir.count_files
+# 目录中的文件夹总数
+puts dir.count_dirs
+# 获取目录的树形结构
+puts dir.hash_tree.to_json
+# 删除目录
+puts dir.delete!
+# 上传文件至目录, 自动大文件分片多线程断点续传
+dir.upload('file2', '~/path2/file2')
+# 批量上传文件至目录,自动大文件分片多线程断点续传
+dir.upload_all('~/path1')
+# 下载目录中的所有文件,自动大文件分片多线程断点续传
+puts bucket.stat('path3').download_all('~/path_store')
+```
+
+### 3.5 文件操作示例
+
+``` ruby
+# 上传文件,自动大文件分片多线程断点续传
+file = bucket.upload('path', 'file1', '~/local_path/file1') do |pr|
+ puts "上传进度 #{(pr*100).round(2)}%"
+end
+# 判断文件是否存在
+puts bucket.exist?('path/file1')
+# 获取文件信息
+file = bucket.stat('path/file1')
+puts file.name
+puts file.biz_attr
+# 更新文件属性
+file.update('i am a biz attr')
+# 判断文件是否上传完成
+puts file.complete?
+# 获取文件大小
+puts file.size # file.file_size OR file.filesize
+# 获取文件格式化的文件大小
+puts file.format_size # 102KB, 3.1MB, 1.5GB
+# 下载文件,自动大文件分片多线程断点续传
+file.download('~/path/file1') do |pr|
+ puts "下载进度 #{(pr*100).round(2)}%"
+end
+# 获取文件访问URL,私有读取bucket自动添加签名
+file.url(cname: 's.domain.com')
+# 删除文件
+file.delete
+```
+
+
+
+## 4 SDK详细说明
+
+### 4.1 初始化与配置
+
+- 4.1.1 详细参数
+
+ ``` ruby
+ {
+ # COS分配的app_id
+ :app_id => 'app_id',
+ # COS分配的secret_id
+ :secret_id => 'secret_id',
+ # COS分配的secret_key
+ :secret_key => 'secret_key',
+ # COS Reatful API Host
+ :host => 'web.file.myqcloud.com',
+ # 使用协议,默认为http,可选https
+ :protocol => 'https',
+ # 接口通讯建立连接超时秒数
+ :open_timeout => 15,
+ # 接口通讯读取数据超时秒数
+ :read_timeout => 120,
+ # 加载配置文件路径
+ :config => '~/path/cos.yml',
+ # 日志输出位置,可以是文件路径也可为STDOUT、STDERR
+ :log_src => '/var/log/cos.log',
+ # 输出日志级别
+ :log_level => Logger::INFO,
+ # 默认bucket
+ :default_bucket => 'bucket_name',
+ # 多次签名过期时间(单位秒)
+ :multiple_sign_expire => 300
+ }
+ ```
+
+
+- 4.1.2 标准方式初始化配置
+
+ ``` ruby
+ require 'cos'
+
+ @client = COS::Client.new(configs)
+ ```
+
+- 4.1.3 实例方式初始化配置
+
+ ``` ruby
+ require 'cos'
+
+ # 程序启动时加载配置
+ COS.client(configs)
+ # 使用client
+ COS.client.bucket
+ ```
+
+- 4.1.4 从配置文件加载配置
+
+ ``` ruby
+ require 'cos'
+
+ @client = COS::Client.new(config: './cos.yml')
+ # 或
+ COS.client(config: './cos.yml')
+ ```
+
+ Rails中会自动加载项目目录下的配置文件`log/cos.yml`
+
+ 🎉【Tip】可以使用CLI指令`cos init`创建默认的yml配置文件,`cos init [配置文件路径]`自定义配置文件的路径。
+
+### 4.2 指定Bucket
+
+所有的资源基本操作是基于一个bucket的,所有我们需要先指定一个bucket:
+
+``` ruby
+@bucket = @client.bucket('bucket_name')
+# 或使用配置的默认bucket
+@bucket = @client.bucket
+```
+
+注:指定bucket时,SDK会获取一次bucket信息,获取权限类型等信息,如bucket不存在将会抛出异常。
+
+### 4.3 Bucket操作(COS::Bucket)
+
+#### 4.3.1 获取Bucket属性
+
+``` ruby
+# bucket名称
+puts @bucket.bucket_name
+# bucket权限
+puts @bucket.authority
+```
+
+| 属性 | 类型 | 描述 |
+| --------------------- | ------------- | -------------------------------------- |
+| bucket_name | String | bucket名称 |
+| authority | String | eWPrivateRPublic私有写公共读,eWPrivate私有写私有读 |
+| bucket_type | Integer | bucket_type |
+| migrate_source_domain | String | 回源地址 |
+| need_preview | String | need_preview |
+| refers | Array<String> | refers |
+| blackrefers | Array<String> | blackrefers |
+| cnames | Array<String> | cnames |
+| nugc_flag | String | nugc_flag |
+
+#### 4.3.2 创建目录(create_folder,mkdir)
+
+``` ruby
+@bucket.create_folder(path, options = {}) # 方法别名mkdir
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :----------------- | :----: | :--: | :--: | ---------------------------------------- |
+| path | String | 是 | 无 | 需要创建的目录路径, 如: 'path1', 'path1/path2', sdk会补齐末尾的 '/'。 |
+| options | Hash | | | |
+| options[:biz_attr] | String | 否 | 无 | 目录属性, 业务端维护 |
+
+返回:
+
+``` ruby
+COS::COSDir # 详见目录操作(COS::COSDir)
+```
+
+示例:
+
+``` ruby
+@bucket.create_folder("test_dir1", biz_attr: '测试目录1')
+```
+
+更多示例详见:example/create_folder.rb
+
+#### 4.3.3 列举目录(list,ls)
+
+``` ruby
+@bucket.list(path = '', options = {}) # 方法别名ls
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :---------------- | :-----: | :--: | :---: | ---------------------------------------- |
+| path | String | 否 | 空 | 需要列举的目录路径, 如: 'path1', 'path1/path2', sdk会补齐末尾的 '/'。 |
+| options | Hash | | | |
+| options[:prefix] | String | 否 | 无 | 搜索前缀,如果填写prefix, 则列出含此前缀的所有文件及目录 |
+| options[:num] | Integer | 否 | 20 | |
+| options[:pattern] | Symbol | 否 | :both | 获取模式,:dir_only 只获取目录, :file_only 只获取文件, 默认为 :both 全部获取 |
+| options[:order] | Symbol | 否 | :asc | 排序方式 :asc 正序, :desc 倒序 默认为 :asc |
+
+返回:
+
+``` ruby
+[Enumerator<Object>] 迭代器, 其中Object可能是COS::COSFile或COS::COSDir
+```
+
+示例:
+
+``` ruby
+@bucket.list('test') do |res|
+ if res.is_a?(COS::COSDir)
+ puts "Dir: #{res.name} #{res.path}"
+ else
+ puts "File: #{res.name} #{res.format_size}"
+ end
+end
+```
+
+更多示例详见:example/list.rb
+
+#### 4.3.4 上传文件(upload)
+
+``` ruby
+@bucket.upload(path_or_dir, file_name, file_src, options = {}, &block)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--------------------------- | :-----: | :---------: | :--------------: | --------------------------------------- |
+| path_or_dir | String\ | COS::COSDir | 是 | 无 |
+| file_name | String | 是 | 无 | 存储文件名 |
+| file_src | String | 是 | 无 | 本地文件路径 |
+| options | Hash | 否 | 无 | |
+| options[:auto_create_folder] | Boolean | 否 | false | 自动创建远端目录 |
+| options[:min_slice_size] | Integer | 否 | 10 * 1024 * 1024 | 完整上传最小文件大小,超过此大小将会使用分片多线程断点续传 |
+| options[:upload_retry] | Integer | 否 | 10 | 上传重试次数 |
+| options[:biz_attr] | String | 否 | 无 | 业务属性 |
+| options[:disable_cpt] | Boolean | 否 | false | 是否禁用checkpoint,如禁用仍可通过服务端进行断点续传 |
+| options[:threads] | Integer | 否 | 10 | 多线程上传线程数 |
+| options[:slice_size] | Integer | 否 | 3 * 1024 * 1024 | 设置分片上传时每个分片的大小。默认为3 MB, 目前服务端最大限制也为3MB。 |
+| options[:cpt_file] | String | 否 | 无 | 断点续传的checkpoint文件 |
+| yield | Float | 否 | 无 | 上传进度百分比回调, 进度值是一个0-1之间的小数 |
+
+注:SDK会自动使用分片断点续传上传大文件。
+
+返回:
+
+``` ruby
+COS::COSFile # 详见目录操作(COS::COSFile)
+```
+
+示例:
+
+``` ruby
+file = @bucket.upload('/test', 'file1.txt', '~/test.txt') do |pr|
+ puts "上传进度 #{(pr*100).round(2)}%"
+end
+puts file.name
+puts file.format_size
+puts file.url
+```
+
+更多示例详见: example/upload.rb
+
+#### 4.3.4 资源属性(stat)
+
+``` ruby
+@bucket.stat(path)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--- | :----: | :--: | :--: | ------------------------------------ |
+| path | String | 是 | 无 | 资源路径, 如: 目录'path1/', 文件'path1/file'。 |
+
+返回:
+
+``` ruby
+可能是COS::COSFile(文件)或COS::COSDir(目录)
+```
+
+示例:
+
+``` ruby
+puts @bucket.stat('/test').name
+```
+
+更多示例详见: example/stat.rb
+
+#### 4.3.5 更新资源属性(upadte)
+
+``` ruby
+@bucket.update(path, biz_attr)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :------- | :----: | :--: | :--: | ------------------------------------ |
+| path | String | 是 | 无 | 资源路径, 如: 目录'path1/', 文件'path1/file'。 |
+| biz_attr | String | 是 | 无 | 业务属性 |
+
+示例:
+
+``` ruby
+@bucket.update('test/file1', 'new biz attr')
+```
+
+更多示例详见: example/update.rb
+
+#### 4.3.6 删除资源(delete)
+
+``` ruby
+@bucket.delete(path)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--- | :----: | :--: | :--: | ------------------------------------ |
+| path | String | 是 | 无 | 资源路径, 如: 目录'path1/', 文件'path1/file'。 |
+
+注意:非空目录或根目录无法删除,会抛出异常
+
+示例:
+
+``` ruby
+@bucket.delete('test/')
+```
+
+更多示例详见:example/delete.rb
+
+#### 4.3.7 删除资源(无异常)(delete!)
+
+``` ruby
+@bucket.delete!(path)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--- | :----: | :--: | :--: | ------------------------------------ |
+| path | String | 是 | 无 | 资源路径, 如: 目录'path1/', 文件'path1/file'。 |
+
+注意:非空目录或根目录无法删除,返回是否成功的bool值。
+
+返回:
+
+``` ruby
+Boolean
+```
+
+示例:
+
+``` ruby
+puts @bucket.delete!('test/')
+```
+
+更多示例详见:example/delete.rb
+
+#### 4.3.8 判断目录是否为空(empty?)
+
+``` ruby
+@bucket.empty?(path)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--- | :----: | :--: | :--: | -------------------------------------- |
+| path | String | 否 | 空 | 目录路径, 如: 目录'path1/'。如为空则会判断bucket是否为空。 |
+
+返回:
+
+``` ruby
+Boolean
+```
+
+示例:
+
+``` ruby
+# 目录是否为空
+puts @bucket.empty?('test/')
+# bucket是否为空
+puts @bucket.empty?
+```
+
+#### 4.3.9 判断资源是否存在(exist?,exists?)
+
+``` ruby
+@bucket.exist?(path) # 别名 exists?
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--- | :----: | :--: | :--: | ----------------------------------- |
+| path | String | 是 | 无 | 资源路径, 如: 目录'path1/', 文件'path1/file' |
+
+返回:
+
+``` ruby
+Boolean
+```
+
+示例:
+
+``` ruby
+puts @bucket.exist?('test/')
+puts @bucket.exist?('test/file1')
+```
+
+#### 4.3.9 判断文件是否上传完成(complete?)
+
+``` ruby
+@bucket.complete?(path)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--- | :----: | :--: | :--: | ----------------------- |
+| path | String | 是 | 无 | 文件资源路径, 如: 'path1/file' |
+
+返回:
+
+``` ruby
+Boolean
+```
+
+示例:
+
+``` ruby
+puts @bucket.complete?('path/file1')
+```
+
+#### 4.3.10 获取文件的访问URL(url)
+
+``` ruby
+@bucket.url(path_or_file, options = {})
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :----------------------- | :-----: | :----------: | :---: | ------------------------------- |
+| path_or_file | String\ | COS::COSFile | 否 | 空 |
+| options | Hash | | | |
+| options[:cname] | String | 否 | 无 | 获取使用cname的url。在cos控制台设置的cname域名 |
+| options[:https] | Boolean | 否 | false | 是否获取https的url |
+| options[:expire_seconds] | Integer | 否 | 600 | 签名有效时间(秒,私有读取bucket时需要) |
+
+返回:
+
+``` ruby
+String
+```
+
+示例:
+
+``` ruby
+puts bucket.url('path1/file1', https: true, cname: 'static.domain.com')
+```
+
+#### 4.3.11 下载文件(download)
+
+``` ruby
+@bucket.download(path_or_file, file_store, options = {}, &block)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :----------------------- | :-----: | :----------: | :-----------: | ----------------------------- |
+| path_or_file | String\ | COS::COSFile | 是 | 无 |
+| file_store | String | 是 | 无 | 本地文件存储路径 |
+| options | Hash | 否 | 无 | |
+| options[:disable_mkdir] | Boolean | 否 | true | 禁止自动创建本地文件夹, 默认会创建 |
+| options[:min_slice_size] | Integer | 否 | 5 * 10 * 1024 | 完整下载最小文件大小,超过此大小将会使用分片多线程断点续传 |
+| options[:download_retry] | Integer | 否 | 10 | 下载重试次数 |
+| options[:disable_cpt] | Boolean | 否 | false | 是否禁用checkpoint,如果禁用则不使用断点续传 |
+| yield | Float | 否 | 无 | 下载进度百分比回调, 进度值是一个0-1之间的小数 |
+
+注:支持私有访问资源下载,SDK会自动携带鉴权签名。SDK会自动使用分片断点续传下载大文件。
+
+返回:
+
+``` ruby
+String # 本地文件存储路径
+```
+
+示例:
+
+``` ruby
+file = bucket.download('path/file1', '~/test/file1') do |p|
+ puts "下载进度: #{(p*100).round(2)}%")
+end
+puts file
+```
+
+更多示例详见:example/download.rb
+
+#### 4.3.12 获取Object树形结构(tree)
+
+``` ruby
+@bucket.tree(path_or_dir = '', options = {})
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :-------------- | :-----: | :---------: | :--: | ---------- |
+| path_or_dir | String\ | COS::COSDir | 否 | 空 |
+| options | Hash | | | |
+| options[:depth] | Integer | 否 | 5 | 子目录深度,默认为5 |
+
+返回:
+
+```
+{
+ :resource => Object<COS::COSDir>,
+ :children => [
+ {:resource => Object<COS::COSDir>, :children => [...]},
+ {:resource => Object<COS::COSFile>, :children => [...]},
+ ...
+ ]
+}
+```
+
+示例:
+
+``` ruby
+tree = @bucket.tree
+puts tree[:resource].name
+tree[:children].each do |r|
+ puts r[:resource].name
+end
+```
+
+#### 4.3.13 获取Hash树形结构(hash_tree)
+
+``` ruby
+@bucket.hash_tree(path_or_dir = '', options = {})
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :-------------- | :-----: | :---------: | :--: | ---------- |
+| path_or_dir | String\ | COS::COSDir | 否 | 空 |
+| options | Hash | | | |
+| options[:depth] | Integer | 否 | 5 | 子目录深度,默认为5 |
+
+返回:
+
+```
+{
+ :resource => {:name...},
+ :children => [
+ {:resource => {:name...}, :children => [...]},
+ {:resource => {:name...}, :children => [...]},
+ ...
+ ]
+}
+```
+
+示例:
+
+``` ruby
+tree = @bucket.hash_tree
+puts tree[:resource][:name]
+tree[:children].each do |r|
+ puts r[:resource][:name]
+end
+puts tree.to_json # 可直接转为json
+```
+
+#### 4.3.14 批量下载目录下的所有文件(download_all)
+
+``` ruby
+@bucket.download_all(path_or_dir, file_store_path, options = {}, &block)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :----------------------- | :-----: | :---------: | :-----------: | ----------------------------- |
+| path_or_dir | String\ | COS::COSDir | 是 | 无 |
+| file_store_path | String | 是 | 无 | 本地文件存储目录 |
+| options | Hash | 否 | 无 | |
+| options[:disable_mkdir] | Boolean | 否 | true | 禁止自动创建本地文件夹, 默认会创建 |
+| options[:min_slice_size] | Integer | 否 | 5 * 10 * 1024 | 完整下载最小文件大小,超过此大小将会使用分片多线程断点续传 |
+| options[:download_retry] | Integer | 否 | 10 | 下载重试次数 |
+| options[:disable_cpt] | Boolean | 否 | false | 是否禁用checkpoint,如果禁用则不使用断点续传 |
+| yield | Float | 否 | 无 | 下载进度百分比回调, 进度值是一个0-1之间的小数 |
+
+注:不包含子目录。支持私有访问资源下载,SDK会自动携带鉴权签名。SDK会自动使用分片断点续传下载大文件。
+
+返回:
+
+``` ruby
+Array<String> # 本地文件存储路径数组
+```
+
+示例:
+
+``` ruby
+files = bucket.download_all('path/', '~/test/path/') do |p|
+ puts "下载进度: #{(p*100).round(2)}%")
+end
+puts files
+```
+
+#### 4.3.15 批量上传目录中的所有文件(upload_all)
+
+``` ruby
+@bucket.upload(path_or_dir, file_src_path, options = {}, &block)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--------------------------- | :-----: | :---------: | :--------------: | --------------------------------------- |
+| path_or_dir | String\ | COS::COSDir | 是 | 无 |
+| file_src_path | String | 是 | 无 | 本地文件夹路径 |
+| options | Hash | 否 | 无 | |
+| options[:skip_error] | Boolean | 否 | false | 是否跳过错误仍继续上传下一个文件 |
+| options[:auto_create_folder] | Boolean | 否 | false | 自动创建远端目录 |
+| options[:min_slice_size] | Integer | 否 | 10 * 1024 * 1024 | 完整上传最小文件大小,超过此大小将会使用分片多线程断点续传 |
+| options[:upload_retry] | Integer | 否 | 10 | 上传重试次数 |
+| options[:biz_attr] | String | 否 | 无 | 业务属性 |
+| options[:disable_cpt] | Boolean | 否 | false | 是否禁用checkpoint,如禁用仍可通过服务端进行断点续传 |
+| options[:threads] | Integer | 否 | 10 | 多线程上传线程数 |
+| options[:slice_size] | Integer | 否 | 3 * 1024 * 1024 | 设置分片上传时每个分片的大小。默认为3 MB, 目前服务端最大限制也为3MB。 |
+| options[:cpt_file] | String | 否 | 无 | 断点续传的checkpoint文件 |
+| yield | Float | 否 | 无 | 上传进度百分比回调, 进度值是一个0-1之间的小数 |
+
+注:不包含子目录。SDK会自动使用分片断点续传上传大文件。
+
+返回:
+
+``` ruby
+Array<COS::COSFile> # 详见目录操作(COS::COSFile)
+```
+
+示例:
+
+``` ruby
+files = @bucket.upload_all('/test', '~/path') do |pr|
+ puts "上传进度 #{(pr*100).round(2)}%"
+end
+puts files
+```
+
+#### 4.3.16 获取资源个数详情(支持前缀搜索)(list_count)
+
+``` ruby
+@bucket.list_count(path = '', options = {})
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--------------- | :----: | :--: | :--: | ---------------------------------------- |
+| path | String | 否 | 空 | 目录路径, 如: 'path1', 'path1/path2', sdk会补齐末尾的 '/'。默认获取bucket根目录 |
+| options | Hash | | | |
+| options[:prefix] | String | 否 | 无 | 前缀搜索 |
+
+返回:
+
+``` ruby
+Hash
+{
+ :total => 5, # 目录及文件总数
+ :files => 2, # 文件总数
+ :dirs => 3, # 目录总数
+}
+```
+
+示例:
+
+``` ruby
+puts @bucket.list_count[:files]
+```
+
+#### 4.3.17 获取资源个数(count, size)
+
+``` ruby
+@bucket.count(path = '') # 别名 size
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--- | :----: | :--: | :--: | ---------------------------------------- |
+| path | String | 否 | 空 | 目录路径, 如: 'path1', 'path1/path2', sdk会补齐末尾的 '/'。默认获取bucket根目录 |
+
+返回:
+
+``` ruby
+Integer # 目录及文件总数
+```
+
+示例:
+
+``` ruby
+puts @bucket.count
+```
+
+#### 4.3.18 获取文件个数(count_files)
+
+``` ruby
+@bucket.count_files(path = '')
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--- | :----: | :--: | :--: | ---------------------------------------- |
+| path | String | 否 | 空 | 目录路径, 如: 'path1', 'path1/path2', sdk会补齐末尾的 '/'。默认获取bucket根目录 |
+
+返回:
+
+``` ruby
+Integer # 文件总数
+```
+
+示例:
+
+``` ruby
+puts @bucket.count_files
+```
+
+#### 4.3.19 获取目录个数(count_dirs)
+
+``` ruby
+@bucket.count_dirs(path = '')
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--- | :----: | :--: | :--: | ---------------------------------------- |
+| path | String | 否 | 空 | 目录路径, 如: 'path1', 'path1/path2', sdk会补齐末尾的 '/'。默认获取bucket根目录 |
+
+返回:
+
+``` ruby
+Integer # 目录总数
+```
+
+示例:
+
+``` ruby
+puts @bucket.count_dirs
+```
+
+### 4.4 资源操作
+
+#### 4.4.1 文件操作(COS::COSFile)
+
+##### 4.4.1.1 获取文件属性
+
+``` ruby
+# 文件名称
+puts file.name
+# 文件格式化大小 1B 1KB 1.1MB 1.12GB...
+puts file.format_size
+```
+
+| 属性 | 类型 | 描述 |
+| ------------------------- | ------- | --------------------------- |
+| name | String | 名称 |
+| path | String | 存储路径 |
+| ctime | String | 创建时间unix时间戳 |
+| mtime | String | 修改时间unix时间戳 |
+| created_at | Time | 创建时间Time |
+| updated_at | Time | 修改时间Time |
+| biz_attr | String | 业务属性 |
+| filesize(file_size, size) | Integer | 文件大小 |
+| filelen | Integer | 已上传的文件大小 |
+| sha | String | 文件sha1值 |
+| access_url | String | 文件访问url |
+| type | String | 类型,固定为file |
+| format_size | String | 格式化文件大小 1B 1KB 1.1MB 1.12GB |
+
+##### 4.4.1.2 获取当前文件属性(刷新)(stat)
+
+``` ruby
+file.stat
+```
+
+返回:
+
+``` ruby
+COS::COSFile
+```
+
+示例:
+
+``` ruby
+puts file.stat.to_hash
+```
+
+##### 4.4.1.3 更新当前文件属性(upadte)
+
+``` ruby
+file.update(biz_attr)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :------- | :----: | :--: | :--: | ---- |
+| biz_attr | String | 是 | 无 | 业务属性 |
+
+示例:
+
+``` ruby
+file.update('new biz attr')
+```
+
+##### 4.4.1.4 删除当前文件(delete)
+
+``` ruby
+file.delete
+```
+
+注意:删除失败将抛出异常
+
+示例:
+
+``` ruby
+file.delete
+```
+
+##### 4.4.1.5 删除当前文件(无异常)(delete!)
+
+``` ruby
+file.delete!
+```
+
+注意:删除失败不会抛出异常,返回是否成功的bool值。
+
+返回:
+
+``` ruby
+Boolean
+```
+
+示例:
+
+``` ruby
+puts file.delete!
+```
+
+##### 4.4.1.6 判断当前文件是否存在(exist?,exists?)
+
+``` ruby
+file.exist? # 别名 exists?
+```
+
+返回:
+
+``` ruby
+Boolean
+```
+
+示例:
+
+``` ruby
+puts file.exist?
+```
+
+##### 4.4.1.7 判断当前文件是否上传完成(complete?)
+
+``` ruby
+file.complete?
+```
+
+返回:
+
+``` ruby
+Boolean
+```
+
+示例:
+
+``` ruby
+puts file.complete?
+```
+
+##### 4.4.1.8 获取当前文件的访问URL(url)
+
+``` ruby
+file.url(options = {})
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :----------------------- | :-----: | :--: | :---: | ------------------------------- |
+| options | Hash | | | |
+| options[:cname] | String | 否 | 无 | 获取使用cname的url。在cos控制台设置的cname域名 |
+| options[:https] | Boolean | 否 | false | 是否获取https的url |
+| options[:expire_seconds] | Integer | 否 | 600 | 签名有效时间(秒,私有读取bucket时需要) |
+
+返回:
+
+``` ruby
+String
+```
+
+示例:
+
+``` ruby
+puts file.url(https: true, cname: 'static.domain.com')
+```
+
+##### 4.4.1.9 下载当前文件(download)
+
+``` ruby
+file.download(file_store, options = {}, &block)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :----------------------- | :-----: | :--: | :-----------: | ----------------------------- |
+| file_store | String | 是 | 无 | 本地文件存储路径 |
+| options | Hash | 否 | 无 | |
+| options[:disable_mkdir] | Boolean | 否 | true | 禁止自动创建本地文件夹, 默认会创建 |
+| options[:min_slice_size] | Integer | 否 | 5 * 10 * 1024 | 完整下载最小文件大小,超过此大小将会使用分片多线程断点续传 |
+| options[:download_retry] | Integer | 否 | 10 | 下载重试次数 |
+| options[:disable_cpt] | Boolean | 否 | false | 是否禁用checkpoint,如果禁用则不使用断点续传 |
+| yield | Float | 否 | 无 | 下载进度百分比回调, 进度值是一个0-1之间的小数 |
+
+注:支持私有访问资源下载,SDK会自动携带鉴权签名。SDK会自动使用分片断点续传下载大文件。
+
+返回:
+
+``` ruby
+String # 本地文件存储路径
+```
+
+示例:
+
+``` ruby
+file = file.download('~/test/file1') do |p|
+ puts "下载进度: #{(p*100).round(2)}%")
+end
+puts file
+```
+
+##### 4.4.1.10 判断当前文件与本地文件是否相同
+
+``` ruby
+file.sha1_match?(file)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--- | :----: | :--: | :--: | ------ |
+| file | String | 是 | 无 | 本地文件路径 |
+
+返回:
+
+``` ruby
+Boolean
+```
+
+示例:
+
+``` ruby
+puts file.sha1_match?('~/file1')
+```
+
+
+
+#### 4.4.2 目录操作(COS::COSDir)
+
+##### 4.4.2.1 获取目录属性
+
+``` ruby
+# 目录名称
+puts dir.name
+# 目录存储路径
+puts dir.path
+```
+
+| 属性 | 类型 | 描述 |
+| ---------- | ------ | ----------- |
+| name | String | 名称 |
+| path | String | 存储路径 |
+| ctime | String | 创建时间unix时间戳 |
+| mtime | String | 修改时间unix时间戳 |
+| created_at | Time | 创建时间Time |
+| updated_at | Time | 修改时间Time |
+| biz_attr | String | 业务属性 |
+| type | String | 类型,固定为dir |
+
+##### 4.4.2.2 列举当前目录(前缀搜索)(list,ls)
+
+``` ruby
+dir.list(options = {}) # 方法别名ls
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :---------------- | :-----: | :--: | :---: | ---------------------------------------- |
+| options | Hash | | | |
+| options[:prefix] | String | 否 | 无 | 搜索前缀,如果填写prefix, 则列出含此前缀的所有文件及目录 |
+| options[:num] | Integer | 否 | 20 | |
+| options[:pattern] | Symbol | 否 | :both | 获取模式,:dir_only 只获取目录, :file_only 只获取文件, 默认为 :both 全部获取 |
+| options[:order] | Symbol | 否 | :asc | 排序方式 :asc 正序, :desc 倒序 默认为 :asc |
+
+返回:
+
+``` ruby
+[Enumerator<Object>] 迭代器, 其中Object可能是COS::COSFile或COS::COSDir
+```
+
+示例:
+
+``` ruby
+dir.list do |res|
+ if res.is_a?(COS::COSDir)
+ puts "Dir: #{res.name} #{res.path}"
+ else
+ puts "File: #{res.name} #{res.format_size}"
+ end
+end
+```
+
+##### 4.4.2.3 创建子目录(create_folder,mkdir)
+
+``` ruby
+dir.create_folder(dir_name, options = {}) # 方法别名mkdir
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :----------------- | :----: | :--: | :--: | --------------------- |
+| dir_name | String | 是 | 无 | 需要创建的子目录名称,不包含父系目录路径。 |
+| options | Hash | | | |
+| options[:biz_attr] | String | 否 | 无 | 目录属性, 业务端维护 |
+
+返回:
+
+``` ruby
+COS::COSDir
+```
+
+示例:
+
+``` ruby
+dir.create_folder("test_dir2", biz_attr: '测试目录1-2')
+```
+
+##### 4.4.2.4 上传文件至当前目录(upload)
+
+``` ruby
+dir.upload(file_name, file_src, options = {}, &block)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--------------------------- | :-----: | :--: | :--------------: | --------------------------------------- |
+| file_name | String | 是 | 无 | 存储文件名 |
+| file_src | String | 是 | 无 | 本地文件路径 |
+| options | Hash | 否 | 无 | |
+| options[:auto_create_folder] | Boolean | 否 | false | 自动创建远端目录 |
+| options[:min_slice_size] | Integer | 否 | 10 * 1024 * 1024 | 完整上传最小文件大小,超过此大小将会使用分片多线程断点续传 |
+| options[:upload_retry] | Integer | 否 | 10 | 上传重试次数 |
+| options[:biz_attr] | String | 否 | 无 | 业务属性 |
+| options[:disable_cpt] | Boolean | 否 | false | 是否禁用checkpoint,如禁用仍可通过服务端进行断点续传 |
+| options[:threads] | Integer | 否 | 10 | 多线程上传线程数 |
+| options[:slice_size] | Integer | 否 | 3 * 1024 * 1024 | 设置分片上传时每个分片的大小。默认为3 MB, 目前服务端最大限制也为3MB。 |
+| options[:cpt_file] | String | 否 | 无 | 断点续传的checkpoint文件 |
+| yield | Float | 否 | 无 | 上传进度百分比回调, 进度值是一个0-1之间的小数 |
+
+注:SDK会自动使用分片断点续传上传大文件。
+
+返回:
+
+``` ruby
+COS::COSFile
+```
+
+示例:
+
+``` ruby
+file = dir.upload('file1.txt', '~/test.txt') do |pr|
+ puts "上传进度 #{(pr*100).round(2)}%"
+end
+puts file.name
+puts file.format_size
+puts file.url
+```
+
+##### 4.4.2.5 批量上传本地目录中的所有文件至当前目录(upload_all)
+
+``` ruby
+dir.upload(file_src_path, options = {}, &block)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--------------------------- | :-----: | :--: | :--------------: | --------------------------------------- |
+| file_src_path | String | 是 | 无 | 本地文件夹路径 |
+| options | Hash | 否 | 无 | |
+| options[:skip_error] | Boolean | 否 | false | 是否跳过错误仍继续上传下一个文件 |
+| options[:auto_create_folder] | Boolean | 否 | false | 自动创建远端目录 |
+| options[:min_slice_size] | Integer | 否 | 10 * 1024 * 1024 | 完整上传最小文件大小,超过此大小将会使用分片多线程断点续传 |
+| options[:upload_retry] | Integer | 否 | 10 | 上传重试次数 |
+| options[:biz_attr] | String | 否 | 无 | 业务属性 |
+| options[:disable_cpt] | Boolean | 否 | false | 是否禁用checkpoint,如禁用仍可通过服务端进行断点续传 |
+| options[:threads] | Integer | 否 | 10 | 多线程上传线程数 |
+| options[:slice_size] | Integer | 否 | 3 * 1024 * 1024 | 设置分片上传时每个分片的大小。默认为3 MB, 目前服务端最大限制也为3MB。 |
+| options[:cpt_file] | String | 否 | 无 | 断点续传的checkpoint文件 |
+| yield | Float | 否 | 无 | 上传进度百分比回调, 进度值是一个0-1之间的小数 |
+
+注:不包含子目录。SDK会自动使用分片断点续传上传大文件。
+
+返回:
+
+``` ruby
+Array<COS::COSFile>
+```
+
+示例:
+
+``` ruby
+files = dir.upload_all('~/path') do |pr|
+ puts "上传进度 #{(pr*100).round(2)}%"
+end
+```
+
+##### 4.4.2.6 批量下载当前目录下的所有文件(download_all)
+
+``` ruby
+dir.download_all(file_store_path, options = {}, &block)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :----------------------- | :-----: | :--: | :-----------: | ----------------------------- |
+| file_store_path | String | 是 | 无 | 本地文件存储目录 |
+| options | Hash | 否 | 无 | |
+| options[:disable_mkdir] | Boolean | 否 | true | 禁止自动创建本地文件夹, 默认会创建 |
+| options[:min_slice_size] | Integer | 否 | 5 * 10 * 1024 | 完整下载最小文件大小,超过此大小将会使用分片多线程断点续传 |
+| options[:download_retry] | Integer | 否 | 10 | 下载重试次数 |
+| options[:disable_cpt] | Boolean | 否 | false | 是否禁用checkpoint,如果禁用则不使用断点续传 |
+| yield | Float | 否 | 无 | 下载进度百分比回调, 进度值是一个0-1之间的小数 |
+
+注:不包含子目录。支持私有访问资源下载,SDK会自动携带鉴权签名。SDK会自动使用分片断点续传下载大文件。
+
+返回:
+
+``` ruby
+Array<String> # 本地文件存储路径数组
+```
+
+示例:
+
+``` ruby
+files = dir.download_all('~/test/path/') do |p|
+ puts "下载进度: #{(p*100).round(2)}%")
+end
+```
+
+##### 4.4.2.7 当前目录属性(刷新)(stat)
+
+``` ruby
+dir.stat
+```
+
+返回:
+
+``` ruby
+COS::COSDir
+```
+
+示例:
+
+``` ruby
+puts dir.stat.to_hash
+```
+
+##### 4.4.2.8 更新当前目录属性(upadte)
+
+``` ruby
+dir.update(biz_attr)
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :------- | :----: | :--: | :--: | ---- |
+| biz_attr | String | 是 | 无 | 业务属性 |
+
+示例:
+
+``` ruby
+dir.update('new biz attr')
+```
+
+##### 4.4.2.9 删除当前目录(delete)
+
+``` ruby
+dir.delete
+```
+
+注意:非空目录或根目录无法删除,会抛出异常
+
+示例:
+
+``` ruby
+dir.delete
+```
+
+##### 4.4.2.10 删除当前目录(无异常)(delete!)
+
+``` ruby
+dir.delete!
+```
+
+注意:非空目录或根目录无法删除,返回是否成功的bool值。
+
+返回:
+
+``` ruby
+Boolean
+```
+
+示例:
+
+``` ruby
+puts dir.delete!
+```
+
+##### 4.4.2.11 判断当前目录是否为空(empty?)
+
+``` ruby
+dir.empty?
+```
+
+返回:
+
+``` ruby
+Boolean
+```
+
+示例:
+
+``` ruby
+puts dir.empty?
+```
+
+##### 4.4.2.12 判断当前目录是否存在(exist?,exists?)
+
+``` ruby
+dir.exist? # 别名 exists?
+```
+
+返回:
+
+``` ruby
+Boolean
+```
+
+示例:
+
+``` ruby
+puts dir.exist?
+```
+
+##### 4.4.2.13 获取当前目录下的Object树形结构(tree)
+
+``` ruby
+dir.tree(options = {})
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :-------------- | :-----: | :--: | :--: | ---------- |
+| options | Hash | | | |
+| options[:depth] | Integer | 否 | 5 | 子目录深度,默认为5 |
+
+返回:
+
+```
+{
+ :resource => Object<COS::COSDir>,
+ :children => [
+ {:resource => Object<COS::COSDir>, :children => [...]},
+ {:resource => Object<COS::COSFile>, :children => [...]},
+ ...
+ ]
+}
+```
+
+示例:
+
+``` ruby
+tree = dir.tree
+puts tree[:resource].name
+tree[:children].each do |r|
+ puts r[:resource].name
+end
+```
+
+##### 4.4.2.14 获取当前目录下的Hash树形结构(hash_tree)
+
+``` ruby
+dir.hash_tree(options = {})
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :-------------- | :-----: | :--: | :--: | ---------- |
+| options | Hash | | | |
+| options[:depth] | Integer | 否 | 5 | 子目录深度,默认为5 |
+
+返回:
+
+```
+{
+ :resource => {:name...},
+ :children => [
+ {:resource => {:name...}, :children => [...]},
+ {:resource => {:name...}, :children => [...]},
+ ...
+ ]
+}
+```
+
+示例:
+
+``` ruby
+tree = dir.hash_tree
+puts tree[:resource][:name]
+tree[:children].each do |r|
+ puts r[:resource][:name]
+end
+puts tree.to_json # 可直接转为json
+```
+
+##### 4.4.2.15 获取当前目录下的资源个数详情(支持前缀搜索)(list_count)
+
+``` ruby
+dir.list_count(options = {})
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--------------- | :----: | :--: | :--: | ---- |
+| options | Hash | | | |
+| options[:prefix] | String | 否 | 无 | 前缀搜索 |
+
+返回:
+
+``` ruby
+Hash
+{
+ :total => 5, # 目录及文件总数
+ :files => 2, # 文件总数
+ :dirs => 3, # 目录总数
+}
+```
+
+示例:
+
+``` ruby
+puts dir.list_count[:files]
+```
+
+##### 4.4.2.16 获取当前目录下的资源个数(count, size)
+
+``` ruby
+dir.count # 别名 size
+```
+
+返回:
+
+``` ruby
+Integer # 目录及文件总数
+```
+
+示例:
+
+``` ruby
+puts dir.count
+```
+
+##### 4.4.2.17 获取当前目录下的文件个数(count_files)
+
+``` ruby
+dir.count_files
+```
+
+返回:
+
+``` ruby
+Integer # 文件总数
+```
+
+示例:
+
+``` ruby
+puts dir.count_files
+```
+
+##### 4.4.2.18 获取当前目录下的子目录个数(count_dirs)
+
+``` ruby
+dir.count_dirs
+```
+
+返回:
+
+``` ruby
+Integer # 目录总数
+```
+
+示例:
+
+``` ruby
+puts dir.count_dirs
+```
+
+
+
+### 4.5 签名操作(COS::Signature)
+
+腾讯移动服务通过签名来验证请求的合法性。开发者通过将签名授权给客户端,使其具备上传下载及管理指定资源的能力。签名分为**多次有效签名**和**单次有效签名**
+
+🔍具体适用场景参见[签名适用场景](http://www.qcloud.com/wiki/%E9%89%B4%E6%9D%83%E6%8A%80%E6%9C%AF%E6%9C%8D%E5%8A%A1%E6%96%B9%E6%A1%88#4_.E7.AD.BE.E5.90.8D.E9.80.82.E7.94.A8.E5.9C.BA.E6.99.AF)
+
+#### 4.5.1 获取单次有效签名(once)
+
+签名中绑定文件fileid,此签名只可使用一次,且只能应用于被绑定的文件。
+
+``` ruby
+puts @client.signature.once(bucket_name, path)
+# path 为操作资源的路径
+```
+
+
+
+#### 4.5.2 获取多次有效签名(multiple)
+
+签名中不绑定文件fileid,有效期内此签名可多次使用,有效期最长可设置三个月。
+
+``` ruby
+puts @client.signature.multiple(bucket_name, expire_seconds)
+# expire_seconds 为从获取时间起得有效时间单位秒,必须大于0。
+```
+
+
+
+## 5 底层API(COS::API)
+
+### 5.1 创建目录(create_folder)
+
+``` ruby
+@client.api.create_folder(path, options = {})
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :----------------- | :----: | :--: | :--: | ---------------------------------------- |
+| path | String | 是 | 无 | 需要创建的目录路径, 如: 'path1', 'path1/path2', sdk会补齐末尾的 '/'。 |
+| options | Hash | | | |
+| options[:biz_attr] | String | 否 | 无 | 目录属性, 业务端维护 |
+| options[:bucket] | String | 否 | 无 | bucket名称,如未配置default_bucket则必须制定 |
+
+返回:
+
+`Hash`
+
+| 参数名 | 类型 | 必须 | 参数描述 |
+| :------------ | :----: | :--: | :---------: |
+| ctime | String | 是 | 创建时间Unix时间戳 |
+| resource_path | String | 是 | 创建的资源路径 |
+
+示例:
+
+``` ruby
+puts @client.api.create_folder("test_dir5", biz_attr: '测试目录5')
+```
+
+
+
+### 5.2 目录列表(前缀搜索)(list)
+
+``` ruby
+@client.api.list(path, options = {})
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :---------------- | :-----: | :--: | :---: | ---------------------------------------- |
+| path | String | 是 | 否 | 需要列举的目录路径, 如: 'path1', 'path1/path2', sdk会补齐末尾的 '/'。 |
+| options | Hash | | | |
+| options[:prefix] | String | 否 | 无 | 搜索前缀,如果填写prefix, 则列出含此前缀的所有文件及目录 |
+| options[:num] | Integer | 否 | 20 | |
+| options[:pattern] | Symbol | 否 | :both | 获取模式,:dir_only 只获取目录, :file_only 只获取文件, 默认为 :both 全部获取 |
+| options[:order] | Symbol | 否 | :asc | 排序方式 :asc 正序, :desc 倒序 默认为 :asc |
+| options[:context] | String | 否 | 空 | 若需要翻页,需要将前一页返回值中的context透传到参数中 |
+| options[:bucket] | String | 否 | 无 | bucket名称,如未配置default_bucket则必须制定 |
+
+返回:
+
+`Hash`
+
+| 参数名 | 类型 | 必须 | 参数描述 |
+| :-------------- | :---------: | :--: | :--------------------------------------: |
+| context | String | 是 | 透传字段,用于翻页,需要往前/往后翻页则透传回来 |
+| has_more | Boolean | 是 | 是否有内容可以继续往前/往后翻页 |
+| dircount | Integer | 是 | 子目录数量(总) |
+| filecount | Integer | 是 | 子文件数量(总) |
+| infos | Array<Hash> | 是 | 列表结果(可能为空) |
+| 子属性 :name | String | 是 | 目录名/文件名 |
+| 子属性 :biz_attr | String | 是 | 目录/文件属性,业务端维护 |
+| 子属性 :filesize | Integer | 否 | 文件大小(当类型为文件时返回) |
+| 子属性 :filelen | Integer | 否 | 文件已传输大小(通过与filesize对比可知文件传输进度,当类型为文件时返回) |
+| 子属性 :sha | String | 否 | 文件sha1(当类型为文件时返回) |
+| 子属性 :ctime | String | 是 | 创建时间(Unix时间戳) |
+| 子属性 :mtime | String | 是 | 修改时间(Unix时间戳) |
+| 子属性 :access_url | String | 否 | 生成的资源可访问的url(当类型为文件时返回) |
+
+示例:
+
+``` ruby
+puts @client.api.list('/test', pattern: :dir_only, order: :desc, prefix: 'abc', context: '')
+```
+
+
+
+### 5.3 上传文件(完整上传)(upload)
+
+``` ruby
+@client.api.upload(path, file_name, file_src, options = {})
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :----------------- | :----: | :--: | :--: | ---------------------------------------- |
+| path | String | 是 | 无 | 目录路径, 如: '/', 'path1', 'path1/path2', sdk会补齐末尾的 '/' |
+| file_name | String | 是 | 无 | 存储文件名 |
+| file_src | String | 是 | 无 | 本地文件路径 |
+| options | Hash | 否 | 无 | |
+| options[:biz_attr] | String | 否 | 无 | 文件属性, 业务端维护 |
+| options[:bucket] | String | 否 | 无 | bucket名称,如未配置default_bucket则必须制定 |
+
+返回:
+
+`Hash`
+
+| 参数名 | 类型 | 必须 | 参数描述 |
+| :------------ | :----: | :--: | :--------: |
+| access_url | String | 是 | 生成的文件下载url |
+| url | String | 是 | 操作文件的url |
+| resource_path | String | 是 | 资源路径 |
+
+示例:
+
+``` ruby
+puts @client.api.upload('/test', 'file1.txt', '~/test.txt')
+```
+
+
+
+### 5.4 上传文件(分片上传)(upload_slice)
+
+``` ruby
+@client.api.upload_slice(path, file_name, file_src, options = {})
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :-------------------- | :-----: | :--: | :-------------: | ---------------------------------------- |
+| path | String | 是 | 无 | 目录路径, 如: '/', 'path1', 'path1/path2', sdk会补齐末尾的 '/' |
+| file_name | String | 是 | 无 | 存储文件名 |
+| file_src | String | 是 | 无 | 本地文件路径 |
+| options | Hash | 否 | 无 | |
+| options[:biz_attr] | String | 否 | 无 | 业务属性 |
+| options[:disable_cpt] | Boolean | 否 | false | 是否禁用checkpoint,如禁用仍可通过服务端进行断点续传 |
+| options[:threads] | Integer | 否 | 10 | 多线程上传线程数 |
+| options[:slice_size] | Integer | 否 | 3 * 1024 * 1024 | 设置分片上传时每个分片的大小。默认为3 MB, 目前服务端最大限制也为3MB。 |
+| options[:cpt_file] | String | 否 | 无 | 断点续传的checkpoint文件 |
+| options[:bucket] | String | 否 | 无 | bucket名称,如未配置default_bucket则必须制定 |
+| yield | Float | 否 | 无 | 上传进度百分比回调, 进度值是一个0-1之间的小数 |
+
+返回:
+
+`Hash`
+
+| 参数名 | 类型 | 必须 | 参数描述 |
+| :------------ | :----: | :--: | :--------: |
+| access_url | String | 是 | 生成的文件下载url |
+| url | String | 是 | 操作文件的url |
+| resource_path | String | 是 | 资源路径 |
+
+示例:
+
+``` ruby
+puts @client.api.upload_slice('/test', 'file1.txt', '~/test.txt') do |pr|
+ puts "上传进度 #{(pr*100).round(2)}%"
+end
+```
+
+
+
+### 5.5 更新文件、目录属性(update)
+
+``` ruby
+@client.api.update(path, biz_attr, options = {})
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--------------- | :----: | :--: | :--: | ---------------------------------------- |
+| path | String | 是 | 无 | 需要创建的目录路径, 如: 'path1', 'path1/path2', sdk会补齐末尾的 '/'。 |
+| biz_attr | String | 是 | 无 | 目录属性, 业务端维护 |
+| options | Hash | | | |
+| options[:bucket] | String | 否 | 无 | bucket名称,如未配置default_bucket则必须制定 |
+
+返回:无
+
+示例:
+
+``` ruby
+@client.api.update('test/file1', 'new biz attr')
+```
+
+### 5.6 删除文件、目录(delete)
+
+``` ruby
+@client.api.delete(path, options = {})
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :--------------- | :----: | :--: | :--: | ---------------------------------------- |
+| path | String | 是 | 无 | 需要创建的目录路径, 如: 'path1', 'path1/path2', sdk会补齐末尾的 '/'。 |
+| options | Hash | | | |
+| options[:bucket] | String | 否 | 无 | bucket名称,如未配置default_bucket则必须制定 |
+
+返回:无
+
+示例:
+
+``` ruby
+@client.api.delete('test/file1')
+```
+
+### 5.7 获取文件或目录属性(stat)
+
+``` ruby
+@client.api.update(path, options = {})
+```
+
+参数:
+
+| | 类型 | 必须 | 默认值 | 参数描述 |
+| :--------------- | :----: | :--: | :--: | ---------------------------------------- |
+| path | String | 是 | 无 | 需要创建的目录路径, 如: 'path1', 'path1/path2', sdk会补齐末尾的 '/'。 |
+| options | Hash | | | |
+| options[:bucket] | String | 否 | 无 | bucket名称,如未配置default_bucket则必须制定 |
+
+返回:
+
+`Hash`
+
+| 参数名 | 类型 | 必须 | 参数描述 |
+| :--------- | :-----: | :--: | :--------------------------------------: |
+| name | String | 是 | 目录名/文件名 |
+| biz_attr | String | 是 | 目录/文件属性,业务端维护 |
+| filesize | Integer | 否 | 文件大小(当类型为文件时返回) |
+| filelen | Integer | 否 | 文件已传输大小(通过与filesize对比可知文件传输进度,当类型为文件时返回) |
+| sha | String | 否 | 文件sha1(当类型为文件时返回) |
+| ctime | String | 是 | 创建时间(Unix时间戳) |
+| mtime | String | 是 | 修改时间(Unix时间戳) |
+| access_url | String | 否 | 生成的资源可访问的url(当类型为文件时返回) |
+
+示例:
+
+``` ruby
+puts @client.api.stat('/test/file')
+```
+
+### 5.8下载文件
+
+``` ruby
+@client.api.download(access_url, file_store, options = {})
+```
+
+参数:
+
+| 参数名 | 类型 | 必须 | 默认值 | 参数描述 |
+| :---------------- | :----: | :--: | :--: | -------------------------------- |
+| access_url | String | 是 | 无 | 资源的下载URL地址可以从list,stat接口中获取 |
+| file_store | String | 是 | 无 | 本地文件存储路径 |
+| options | Hash | 否 | 无 | |
+| options[:bucket] | String | 否 | 无 | bucket名称,如未配置default_bucket则必须制定 |
+| options[:headers] | Hash | 否 | 无 | 设置下载请求头,如:rang |
+
+示例:
+
+``` ruby
+@client.api.download('/test/file', '~/test.txt')
+```
+
+
+
+## 6 CLI命令行工具
+
+SDK提供了一套包含所有API调用的CLI工具,方便开发者更好的调试与更便捷的使用COS。
+
+获取CLI指令列表:
+
+``` shell
+$ cos
+
+COS Ruby SDK CLI commands:
+ cos count [PATH] # 获取文件及目录数
+ cos count_dirs [PATH] # 获取目录数
+ cos count_files [PATH] # 获取文件数
+ cos create_folder [PATH] # 创建目录
+ cos delete [PATH] # 删除目录或文件
+ cos download [PATH] [FILE_STORE] # 下载文件(大文件自动分片下载,支持多线程断点续传)
+ cos download_all [PATH] [FILE_STORE_PATH] # 下载目录下的所有文件(不含子目录)
+ cos is_exist [PATH] # 判断文件或目录是否存在
+ cos help [COMMAND] # 获取指令的使用帮助
+ cos init # 创建默认配置文件
+ cos is_complete [PATH] # 判断文件是否上传完整
+ cos is_empty [PATH] # 判断目录是否为空
+ cos list [PATH] # 获取目录列表
+ cos sign_multi [EXPIRE] # 生成多次可用签名
+ cos sign_once [PATH] # 生成单次可用签名
+ cos stat [PATH] # 获取目录或文件信息
+ cos tree [PATH] # 显示树形结构
+ cos update [PATH] [BIZ_ATTR] # 更新业务属性
+ cos upload [PATH] [FILE_NAME] [FILE_SRC] # 上传文件(大文件自动分片上传,支持多线程断点续传)
+ cos upload_all [PATH] [FILE_SRC_PATH] # 上传目录下的所有文件(不含子目录)
+ cos url [PATH] # 获取文件的访问URL
+
+Options:
+ -c, [--config=CONFIG] # 加载配置文件
+ # Default: ~/.cos.yml
+ -b, [--bucket=BUCKET] # 指定Bucket
+```
+
+获取指令的详细参数如:
+
+``` shell
+$ cos help upload
+
+Usage:
+ cos upload [PATH] [FILE_NAME] [FILE_SRC]
+
+Options:
+ -r, [--biz-attr=BIZ_ATTR] # 业务属性
+ -m, [--min-slice-size=bytes] # 最小完整上传大小
+ -f, [--auto-create-folder], [--no-auto-create-folder] # 自动创建目录
+ -d, [--disable-cpt], [--no-disable-cpt] # 禁用断点续传(分片上传时有效)
+ -t, [--threads=N] # 线程数(分片上传时有效)
+ -n, [--upload-retry=N] # 重试次数(分片上传时有效)
+ -s, [--slice-size=N] # 分片上传时每个分片的大小(分片上传时有效)
+ -e, [--cpt-file=CPT_FILE] # 指定断点续传记录(分片上传时有效)
+ -c, [--config=CONFIG] # 加载配置文件
+ # Default: ~/.cos.yml
+ -b, [--bucket=BUCKET] # 指定Bucket
+
+上传文件(大文件自动分片上传,支持多线程上传,断点续传)
+```
+
+初始化创建配置文件:(默认创建于`~/.cos.yml`)
+
+``` shell
+$ cos init
+```
+
+使用CLI:
+
+``` shell
+$ cos upload path/path2 file1 ~/file1
+```
+
+## 7 运行测试
+
+```
+rspec
+```
+
+或
+
+```
+bundle exec rake spec
+```
\ No newline at end of file