diff --git a/Gemfile.lock b/Gemfile.lock
index abe5a6d..a15524f 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,7 +1,7 @@
PATH
remote: .
specs:
- qiniu-rs (2.4.0)
+ qiniu-rs (3.0.0)
json (~> 1.7.3)
mime-types (~> 1.19)
rest-client (~> 1.6.7)
diff --git a/docs/README.md b/docs/README.md
index 949582d..9c49629 100644
--- a/docs/README.md
+++ b/docs/README.md
@@ -17,6 +17,7 @@ title: Ruby SDK 使用指南 | 七牛云存储
- [上传文件](#upload)
- [获取用于上传文件的临时授权凭证](#generate-upload-token)
- [服务端上传文件](#upload-server-side)
+ - [针对 NotFound 场景处理](#upload-file-for-not-found)
- [客户端直传文件](#upload-client-side)
- [查看文件属性信息](#stat)
- [获取文件下载链接(含文件属性信息)](#get)
@@ -29,9 +30,9 @@ title: Ruby SDK 使用指南 | 七牛云存储
- [批量删除文件](#batch_delete)
- [创建公开外链](#publish)
- [取消公开外链](#unpublish)
- - [bucket 管理](#buckets)
- - [创建 bucket](#mkbucket)
- - [列出所有 bucket](#list-all-buckets)
+ - [Bucket(资源表)管理](#buckets)
+ - [创建 Bucket](#mkbucket)
+ - [列出所有 Bucket](#list-all-buckets)
- [访问控制](#set-protected)
- [图像处理](#op-image)
- [查看图片属性信息](#image_info)
@@ -40,6 +41,12 @@ title: Ruby SDK 使用指南 | 七牛云存储
- [高级图像处理(缩略、裁剪、旋转、转化)](#image_mogrify_preview_url)
- [高级图像处理(缩略、裁剪、旋转、转化)并持久化](#image_mogrify_save_as)
- [高级图像处理(水印)](#image-watermarking)
+ - [水印准备工作](#watermarking-pre-work)
+ - [设置原图保护](#watermarking-set-protected)
+ - [设置水印预览图URL分隔符](#watermarking-set-sep)
+ - [设置水印预览图规格别名](#watermarking-set-style)
+ - [设置水印模板](#watermarking-set-template)
+ - [获取水印模板](#watermarking-get-template)
- [贡献代码](#Contributing)
- [许可证](#License)
@@ -116,20 +123,20 @@ title: Ruby SDK 使用指南 | 七牛云存储
**参数**
-scope
+:scope
: 必须,字符串类型(String),设定文件要上传到的目标 `bucket`
-expires_in
+:expires_in
: 可选,数字类型,用于设置上传 URL 的有效期,单位:秒,缺省为 3600 秒,即 1 小时后该上传链接不再有效(但该上传URL在其生成之后的59分59秒都是可用的)。
-callback_url
+:callback_url
: 可选,字符串类型(String),用于设置文件上传成功后,七牛云存储服务端要回调客户方的业务服务器地址。
-callback_body_type
+:callback_body_type
: 可选,字符串类型(String),用于设置文件上传成功后,七牛云存储服务端向客户方的业务服务器发送回调请求的 `Content-Type`。
-customer
-: 可选,字符串类型(String),
+:customer
+: 可选,字符串类型(String),客户方终端用户(End User)的ID,该字段可以用来标示一个文件的属主,这在一些特殊场景下(比如给终端用户上传的图片打上名字水印)非常有用。
**返回值**
@@ -139,50 +146,62 @@ customer
#### 服务端上传文件
-通过 `Qiniu::RS.upload_with_token()` 方法可在客户方的业务服务器上直接往七牛云存储上传文件。该函数规格如下:
+通过 `Qiniu::RS.upload_file()` 方法可在客户方的业务服务器上直接往七牛云存储上传文件。该函数规格如下:
- Qiniu::RS.upload_with_token :uptoken => upload_token,
- :file => file_path,
- :bucket => bucket_name,
- :key => record_id,
- :mime_type => file_mime_type,
- :note => some_notes,
- :callback_params => callback_params,
- :enable_crc32_check => false
+ Qiniu::RS.upload_file :uptoken => upload_token,
+ :file => file_path,
+ :bucket => bucket_name,
+ :key => record_id,
+ :mime_type => file_mime_type,
+ :note => some_notes,
+ :callback_params => callback_params,
+ :enable_crc32_check => false
**参数**
-uptoken
+:uptoken
: 必须,字符串类型(String),调用 `Qiniu::RS.generate_upload_token` 生成的 [用于上传文件的临时授权凭证](#generate-upload-token)
-file
+:file
: 必须,字符串类型(String),本地文件可被读取的有效路径
-bucket
+:bucket
: 必须,字符串类型(String),类似传统数据库里边的表名称,我们暂且将其叫做“资源表”,指定将该数据属性信息存储到具体的资源表中 。
-key
+:key
: 必须,字符串类型(String),类似传统数据库里边某个表的主键ID,给每一个文件一个UUID用于进行标示。
-mime_type
+:mime_type
: 可选,字符串类型(String),文件的 mime-type 值。如若不传入,SDK 会自行计算得出,若计算失败缺省使用 application/octet-stream 代替之。
-note
+:note
: 可选,字符串类型(String),为文件添加备注信息。
-callback_params
+:callback_params
: 可选,String 或者 Hash 类型,文件上传成功后,七牛云存储向客户方业务服务器发送的回调参数。
-enable_crc32_check
+:enable_crc32_check
: 可选,Boolean 类型,是否启用文件上传 crc32 校验,缺省为 false 。
**返回值**
-上传成功,返回 `true`,否则返回 `false` 。
+上传成功,返回如下一个 Hash,否则返回 `false`:
-**针对 NotFound 处理**
+ {"hash"=>"FgHk-_iqpnZji6PsNr4ghsK5qEwR"}
-您可以上传一个应对 HTTP 404 出错处理的文件,当您 [创建公开外链](#publish) 后,若公开的外链找不到该文件,即可使用您上传的“自定义404文件”代替之。要这么做,您只须使用 `Qiniu::RS.put_file` 函数上传一个 `key` 为固定字符串类型的值 `errno-404` 即可。
+
+
+##### 针对 NotFound 场景处理
+
+您可以上传一个应对 HTTP 404 出错处理的文件,当您 [创建公开外链](#publish) 后,若公开的外链找不到该文件,即可使用您上传的“自定义404文件”代替之。要这么做,您只须使用 `Qiniu::RS.upload_file` 函数上传一个 `key` 为固定字符串类型的值 `errno-404` 即可。
+
+除了使用 SDK 提供的方法,同样也可以借助七牛云存储提供的命令行辅助工具 [qboxrsctl](https://github.com/qiniu/devtools/tags) 达到同样的目的:
+
+ qboxrsctl put
+
+将其中的 `` 换作 `errno-404` 即可。
+
+注意,每个 `` 里边有且只有一个 `errno-404` 文件,上传多个,最后的那一个会覆盖前面所有的。
@@ -478,20 +497,61 @@ domain
-### bucket 管理
+### Bucket(资源表)管理
-#### 创建 bucket
+#### 创建 Bucket
+
+ Qiniu::RS.mkbucket(bucket_name)
+
+可以通过 SDK 提供的 `Qiniu::RS.mkbucket` 函数创建一个 bucket(资源表)。
+
+**参数**
+
+bucket_name
+: 必须,字符串类型(String),资源表 bucket 的名称。
+
+**返回值**
+
+如果指定 bucket 创建成功,返回 `true`,否则返回 `false` 。
-#### 列出所有 bucket
+#### 列出所有 Bucket
+
+ Qiniu::RS.buckets
+
+可以通过 SDK 提供的 `Qiniu::RS.buckets` 函数列出当前登录客户的所有 buckets(资源表)。
+
+**返回值**
+
+如果请求成功,返回一个 buckets 的列表(Array),否则返回 `false` 。
+
+ ["Bucket1", "Bucket2", …, "BucketN"]
#### 访问控制
-
+
+ Qiniu::RS.set_protected(bucket_name, protected_mode)
+
+可以通过 SDK 提供的 `Qiniu::RS.set_protected` 函数来设置指定 bucket 的访问属性,一般在水印处理时作原图保护用。
+
+**参数**
+
+bucket_name
+: 必须,字符串类型(String),指定资源表 bucket 的名称。
+
+protected_mode
+: 必须,整型,值为 1 或者 0,值为 1 表示启用保护模式,反之亦然。
+
+该函数不常用,一般在特殊场景下会用到。比如给图片打水印时,首先要设置原图保护,禁用公开的图像处理操作,采用水印的特殊图像处理,而保护原图就可以通过该函数操作实现。
+
+**返回值**
+
+如果设置成功,返回 `true`,否则返回 `false` 。
+
@@ -681,6 +741,219 @@ mogrify_options
end
+
+
+## 高级图像处理(水印)
+
+
+
+### 水印准备工作
+
+为了保护用户原图和方便用户访问打过水印之后的图片,在经水印作用之前,需进行以下一些设置:
+
+1. [设置原图保护](#watermarking-set-protected)
+2. [设置水印预览图URL分隔符](#watermarking-set-sep)
+3. [设置水印预览图规格别名](#watermarking-set-style)
+
+
+
+#### 1. 设置原图保护
+
+用户的图片打上水印后,其原图不可见。通过给原图所在的 Bucket(资源表)设置访问控制,可以达到保护原图的目的,详情请参考 [Bucket(资源表)管理之访问控制](set-protected)。
+
+设置原图保护也可以借助七牛云存储提供的命令行辅助工具 [qboxrsctl](https://github.com/qiniu/devtools/tags) 来实现:
+
+ // 为下面的所有图片设置原图保护
+ qboxrsctl protected
+
+
+
+#### 2. 设置水印预览图URL分隔符
+
+没有设置水印前,用户可以通过如下公开链接的形式访问原图([创建公开外链后的情况下](/v3/api/io/#rs-Publish)):
+
+ http:///
+
+设置水印后,其原图属性为私有,不能再通过这种形式访问。但是用户可以在原图的 `` 后面加上“分隔符”,以及相应的水印风格样式来访问打水印后的图片。例如,假设您为用户设定的访问水印图的分隔符为中划线 “-”,那么用户可以通过这种形式来访问打水印后的图片:
+
+ http:///-/imageView//w//h//q//format//sharpen//watermark/
+
+其中,`HasWatermark` 参数为 `0` (或者没有)表示不打水印,为 `1` 表示给图片打水印。
+
+通过 SDK 提供的 `Qiniu::RS.set_separator` 函数可以设置水印预览图URL分隔符:
+
+ Qiniu::RS.set_separator(bucket_name, separator)
+
+**参数**
+
+bucket_name
+: 必须,字符串类型(String),图片所在的 Bucket(资源表) 名称
+
+separator
+: 必须,字符串类型(String),源图片与预览图规格之间的分割符
+
+**返回值**
+
+操作成功返回 `true`,否则返回 `false`。
+
+除了使用 SDK 提供的方法,同样可以借助七牛云存储提供的命令行辅助工具 [qboxrsctl](https://github.com/qiniu/devtools/tags) 达到同样的目的:
+
+ // 设置预览图分隔符
+ qboxrsctl separator
+
+
+
+#### 3. 设置水印预览图规格别名
+
+通过步骤2中所描述的水印预览图 URL 来访问打水印后的图片毕竟较为繁琐,因此可以通过为该水印预览图规格设置“别名”的形式来访问。如:
+
+别名(Name) | 规格(Style) | 说明
+----------- | ------------ | -------
+small.jpg | imageView/0/w/120/h/90 | 大小为 120x90,不打水印
+middle.jpg | imageView/0/w/440/h/330/watermark/1 | 大小为 440x330,打水印
+large.jpg | imageView/0/w/1280/h/760/watermark/1 | 大小为 1280x760,打水印
+
+
+SDK 提供了 `Qiniu::RS.set_style` 函数可以定义预览图规格别名,该函数原型如下:
+
+ Qiniu::RS.set_style(bucket, name, style)
+
+**参数**
+
+bucket
+: 必须,字符串类型(String),图片所在的 Bucket(资源表) 名称
+
+name
+: 必须,字符串类型(String),预览图规格名称(别名)
+
+style
+: 必须,字符串类型(String),具体的规格样式
+
+**返回值**
+
+操作成功返回 `true`,否则返回 `false` 。
+
+除了使用 SDK 提供的方法,同样也可以借助七牛云存储提供的命令行辅助工具 [qboxrsctl](https://github.com/qiniu/devtools/tags) 达到同样的目的:
+
+ // 为 下面的所有图片设置名为 的