qiniu-rs 2.3.3 → 3.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- qiniu-rs (2.3.3)
4
+ qiniu-rs (3.0.3)
5
5
  json (~> 1.7.3)
6
6
  mime-types (~> 1.19)
7
7
  rest-client (~> 1.6.7)
@@ -17,14 +17,14 @@ GEM
17
17
  rake (0.9.2.2)
18
18
  rest-client (1.6.7)
19
19
  mime-types (>= 1.16)
20
- rspec (2.10.0)
21
- rspec-core (~> 2.10.0)
22
- rspec-expectations (~> 2.10.0)
23
- rspec-mocks (~> 2.10.0)
24
- rspec-core (2.10.1)
25
- rspec-expectations (2.10.0)
20
+ rspec (2.11.0)
21
+ rspec-core (~> 2.11.0)
22
+ rspec-expectations (~> 2.11.0)
23
+ rspec-mocks (~> 2.11.0)
24
+ rspec-core (2.11.1)
25
+ rspec-expectations (2.11.2)
26
26
  diff-lcs (~> 1.1.3)
27
- rspec-mocks (2.10.1)
27
+ rspec-mocks (2.11.2)
28
28
  ruby-hmac (0.4.0)
29
29
 
30
30
  PLATFORMS
@@ -33,5 +33,5 @@ PLATFORMS
33
33
  DEPENDENCIES
34
34
  fakeweb (~> 1.3.0)
35
35
  qiniu-rs!
36
- rake (~> 0.9.2.2)
37
- rspec (~> 2.10.0)
36
+ rake (~> 0.9)
37
+ rspec (~> 2.11)
data/README.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  # 关于
4
4
 
5
- 此 Ruby SDK 适用于 Ruby 1.8.x, 1.9.x, jruby, rbx, ree 版本,基于 [七牛云存储官方API](http://docs.qiniutek.com/v2/api/) 构建。使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上。无论您的网络应用是一个网站程序,还是包括从云端(服务端程序)到终端(手持设备应用)的架构的服务或应用,通过七牛云存储及其 SDK,都能让您应用程序的终端用户高速上传和下载,同时也让您的服务端更加轻盈。
5
+ 此 Ruby SDK 适用于 Ruby 1.8.x, 1.9.x, jruby, rbx, ree 版本,基于 [七牛云存储官方API](http://docs.qiniutek.com/v3/api/) 构建。使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上。无论您的网络应用是一个网站程序,还是包括从云端(服务端程序)到终端(手持设备应用)的架构的服务或应用,通过七牛云存储及其 SDK,都能让您应用程序的终端用户高速上传和下载,同时也让您的服务端更加轻盈。
6
6
 
7
7
  ## 安装
8
8
 
@@ -20,7 +20,7 @@
20
20
 
21
21
  ## 使用
22
22
 
23
- 参考文档:[七牛云存储 Ruby SDK 使用指南](http://docs.qiniutek.com/v2/sdk/ruby/)
23
+ 参考文档:[七牛云存储 Ruby SDK 使用指南](http://docs.qiniutek.com/v3/sdk/ruby/)
24
24
 
25
25
  ## 贡献代码
26
26
 
data/docs/README.md CHANGED
@@ -4,7 +4,7 @@ title: Ruby SDK 使用指南 | 七牛云存储
4
4
 
5
5
  # Ruby SDK 使用指南
6
6
 
7
- 此 Ruby SDK 适用于 Ruby 1.8.x, 1.9.x, jruby, rbx, ree 版本,基于 [七牛云存储官方API](/v2/api/) 构建。使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上。无论您的网络应用是一个网站程序,还是包括从云端(服务端程序)到终端(手持设备应用)的架构的服务或应用,通过七牛云存储及其 SDK,都能让您应用程序的终端用户高速上传和下载,同时也让您的服务端更加轻盈。
7
+ 此 Ruby SDK 适用于 Ruby 1.8.x, 1.9.x, jruby, rbx, ree 版本,基于 [七牛云存储官方API](/v3/api/) 构建。使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上。无论您的网络应用是一个网站程序,还是包括从云端(服务端程序)到终端(手持设备应用)的架构的服务或应用,通过七牛云存储及其 SDK,都能让您应用程序的终端用户高速上传和下载,同时也让您的服务端更加轻盈。
8
8
 
9
9
  七牛云存储 Ruby SDK 源码地址:[https://github.com/qiniu/ruby-sdk](https://github.com/qiniu/ruby-sdk)
10
10
 
@@ -15,26 +15,38 @@ title: Ruby SDK 使用指南 | 七牛云存储
15
15
  - [应用接入](#establish_connection!)
16
16
  - [Ruby On Rails 应用初始化设置](#ror-init)
17
17
  - [上传文件](#upload)
18
- - [服务端上传流程](#upload-server-side)
19
- - [客户端上传流程](#upload-client-side)
20
- - [获取用于上传文件的临时授权URL](#put_auth)
18
+ - [获取用于上传文件的临时授权凭证](#generate-upload-token)
19
+ - [服务端上传文件](#upload-server-side)
20
+ - [针对 NotFound 场景处理](#upload-file-for-not-found)
21
+ - [客户端直传文件](#upload-client-side)
21
22
  - [查看文件属性信息](#stat)
22
23
  - [获取文件下载链接(含文件属性信息)](#get)
23
24
  - [只获取文件下载链接](#download)
24
25
  - [删除指定文件](#delete)
25
- - [删除所有文件(单个“表”)](#drop)
26
+ - [删除所有文件(单个 bucket)](#drop)
26
27
  - [批量操作](#batch)
27
28
  - [批量获取文件属性信息(含下载链接)](#batch_get)
28
29
  - [批量获取文件下载链接](#batch_download)
29
30
  - [批量删除文件](#batch_delete)
30
31
  - [创建公开外链](#publish)
31
32
  - [取消公开外链](#unpublish)
33
+ - [Bucket(资源表)管理](#buckets)
34
+ - [创建 Bucket](#mkbucket)
35
+ - [列出所有 Bucket](#list-all-buckets)
36
+ - [访问控制](#set-protected)
32
37
  - [图像处理](#op-image)
33
38
  - [查看图片属性信息](#image_info)
34
39
  - [查看图片EXIF信息](#image_exif)
35
40
  - [获取指定规格的缩略图预览地址](#image_preview_url)
36
41
  - [高级图像处理(缩略、裁剪、旋转、转化)](#image_mogrify_preview_url)
37
42
  - [高级图像处理(缩略、裁剪、旋转、转化)并持久化](#image_mogrify_save_as)
43
+ - [高级图像处理(水印)](#image-watermarking)
44
+ - [水印准备工作](#watermarking-pre-work)
45
+ - [设置原图保护](#watermarking-set-protected)
46
+ - [设置水印预览图URL分隔符](#watermarking-set-sep)
47
+ - [设置水印预览图规格别名](#watermarking-set-style)
48
+ - [设置水印模板](#watermarking-set-template)
49
+ - [获取水印模板](#watermarking-get-template)
38
50
 
39
51
  - [贡献代码](#Contributing)
40
52
  - [许可证](#License)
@@ -95,21 +107,61 @@ title: Ruby SDK 使用指南 | 七牛云存储
95
107
 
96
108
  ### 上传文件
97
109
 
110
+ <a name="generate-upload-token"></a>
111
+
112
+ #### 获取用于上传文件的临时授权凭证
113
+
114
+ 要上传一个文件,首先需要调用 SDK 提供的 `Qiniu::RS.generate_upload_token` 函数来获取一个经过授权用于临时匿名上传的 `upload_token`——经过数字签名的一组数据信息,该 `upload_token` 作为文件上传流中 `multipart/form-data` 的一部分进行传输。
115
+
116
+ `Qiniu::RS.generate_upload_token` 函数原型如下:
117
+
118
+ Qiniu::RS.generate_upload_token :scope => target_bucket,
119
+ :expires_in => expires_in_seconds,
120
+ :callback_url => callback_url,
121
+ :callback_body_type => callback_body_type,
122
+ :customer => end_user_id
123
+
124
+ **参数**
125
+
126
+ :scope
127
+ : 必须,字符串类型(String),设定文件要上传到的目标 `bucket`
128
+
129
+ :expires_in
130
+ : 可选,数字类型,用于设置上传 URL 的有效期,单位:秒,缺省为 3600 秒,即 1 小时后该上传链接不再有效(但该上传URL在其生成之后的59分59秒都是可用的)。
131
+
132
+ :callback_url
133
+ : 可选,字符串类型(String),用于设置文件上传成功后,七牛云存储服务端要回调客户方的业务服务器地址。
134
+
135
+ :callback_body_type
136
+ : 可选,字符串类型(String),用于设置文件上传成功后,七牛云存储服务端向客户方的业务服务器发送回调请求的 `Content-Type`。
137
+
138
+ :customer
139
+ : 可选,字符串类型(String),客户方终端用户(End User)的ID,该字段可以用来标示一个文件的属主,这在一些特殊场景下(比如给终端用户上传的图片打上名字水印)非常有用。
140
+
141
+ **返回值**
142
+
143
+ 返回一个字符串类型(String)的用于上传文件用的临时授权 `upload_token`。
144
+
98
145
  <a name="upload-server-side"></a>
99
146
 
100
- #### 服务端上传流程
147
+ #### 服务端上传文件
101
148
 
102
- 通过 `Qiniu::RS.put_file()` 方法可在客户方的业务服务器上直接往七牛云存储上传文件。该函数规格如下:
149
+ 通过 `Qiniu::RS.upload_file()` 方法可在客户方的业务服务器上直接往七牛云存储上传文件。该函数规格如下:
103
150
 
104
- Qiniu::RS.put_file :file => file_path,
105
- :key => record_id,
106
- :bucket => bucket_name,
107
- :mime_type => file_mime_type,
108
- :note => some_notes,
109
- :enable_crc32_check => true
151
+ Qiniu::RS.upload_file :uptoken => upload_token,
152
+ :file => file_path,
153
+ :bucket => bucket_name,
154
+ :key => record_id,
155
+ :mime_type => file_mime_type,
156
+ :note => some_notes,
157
+ :callback_params => callback_params,
158
+ :enable_crc32_check => false
110
159
 
111
160
  **参数**
112
161
 
162
+ :uptoken
163
+ : 必须,字符串类型(String),调用 `Qiniu::RS.generate_upload_token` 生成的 [用于上传文件的临时授权凭证](#generate-upload-token)
164
+
113
165
  :file
114
166
  : 必须,字符串类型(String),本地文件可被读取的有效路径
115
167
 
@@ -123,48 +175,46 @@ title: Ruby SDK 使用指南 | 七牛云存储
123
175
  : 可选,字符串类型(String),文件的 mime-type 值。如若不传入,SDK 会自行计算得出,若计算失败缺省使用 application/octet-stream 代替之。
124
176
 
125
177
  :note
126
- : 可选,字符串类型(String),备注信息。
178
+ : 可选,字符串类型(String),为文件添加备注信息。
179
+
180
+ :callback_params
181
+ : 可选,String 或者 Hash 类型,文件上传成功后,七牛云存储向客户方业务服务器发送的回调参数。
127
182
 
128
183
  :enable_crc32_check
129
- : 可选,Boolean 类型,是否启用文件上传 crc32 校验,默认为 false 。
184
+ : 可选,Boolean 类型,是否启用文件上传 crc32 校验,缺省为 false 。
130
185
 
131
186
  **返回值**
132
187
 
133
- 上传成功,返回 `true`,否则返回 `false` 。
134
-
135
- **针对 NotFound 处理**
188
+ 上传成功,返回如下一个 Hash,否则返回 `false`:
136
189
 
137
- 您可以上传一个应对 HTTP 404 出错处理的文件,当您 [创建公开外链](#publish) 后,若公开的外链找不到该文件,即可使用您上传的“自定义404文件”代替之。要这么做,您只须使用 `Qiniu::RS.put_file` 函数上传一个 `key` 为固定字符串类型的值 `errno-404` 即可。
138
-
139
- <a name="upload-client-side"></a>
190
+ {"hash"=>"FgHk-_iqpnZji6PsNr4ghsK5qEwR"}
140
191
 
141
- #### 客户端上传流程
192
+ <a name="upload-file-for-not-found"></a>
142
193
 
143
- <a name="put_auth"></a>
194
+ ##### 针对 NotFound 场景处理
144
195
 
145
- #### 获取用于上传文件的临时授权URL
196
+ 您可以上传一个应对 HTTP 404 出错处理的文件,当您 [创建公开外链](#publish) 后,若公开的外链找不到该文件,即可使用您上传的“自定义404文件”代替之。要这么做,您只须使用 `Qiniu::RS.upload_file` 函数上传一个 `key` 为固定字符串类型的值 `errno-404` 即可。
146
197
 
147
- Qiniu::RS.put_auth(expires_in = nil, callback_url = nil)
198
+ 除了使用 SDK 提供的方法,同样也可以借助七牛云存储提供的命令行辅助工具 [qboxrsctl](https://github.com/qiniu/devtools/tags) 达到同样的目的:
148
199
 
149
- 要上传一个文件,首先需要调用 SDK 提供的 `Qiniu::RS.put_auth` 函数来获取一个经过授权用于临时匿名上传的 URL 。 “临时” 一词表示该 URL 有一定的时效性,即过一段时间后会过期,有效期由传入的参数 `expires_in` 决定,缺省情况下 `expires_in` 的值是 3600 秒,即 1 小时后该上传链接不再有效(但该上传URL在其生成之后的59分59秒都是可用的)。
200
+ qboxrsctl put <Bucket> <Key> <LocalFile>
150
201
 
151
- **参数**
202
+ 将其中的 `<Key>` 换作 `errno-404` 即可。
152
203
 
153
- expires_in
154
- : 可选,整型,用于设置上传 URL 的有效期,单位:秒,缺省为 3600 秒
204
+ 注意,每个 `<Bucket>` 里边有且只有一个 `errno-404` 文件,上传多个,最后的那一个会覆盖前面所有的。
155
205
 
156
- callback_url
157
- : 可选,字符串类型(String),用于设置文件往这个 URL 上传成功后,七牛云存储服务端要回调客户方的业务服务器地址。
206
+ <a name="upload-client-side"></a>
158
207
 
159
- **返回值**
208
+ #### 客户端直传文件
160
209
 
161
- 如果请求成功,返回一个字符串类型(String)的用于上传文件的已授权的临时有效 URL ,否则返回 `false`
210
+ 客户端上传流程和服务端上传类似,差别在于:客户端直传文件所需的 `upload_token` 可以选择在客户方的业务服务器端生成,也可以选择在客户方的客户端程序里边生成。选择前者,可以和客户方的业务揉合得更紧密和安全些,比如防伪造请求。
162
211
 
163
- **示例**
212
+ 简单来讲,客户端上传流程也分为两步:
164
213
 
165
- remote_upload_url = Qiniu::RS.put_auth(60, 'http://api.example.com/notifications/qiniu-rs')
214
+ 1. 获取 `upload_token`([用于上传文件的临时授权凭证](#generate-upload-token)
215
+ 2. 将该 `upload_token` 作为文件上传流 `multipart/form-data` 中的一部分实现上传操作
166
216
 
167
- 如果您的网络程序是从云端(服务端程序)到终端(手持设备应用)的架构模型,且终端用户有使用您移动端App上传文件(比如照片或视频)的需求,可以把您服务器得到的此 `remote_upload_url` 返回给手持设备端的App,然后您的移动 App 可以使用 [七牛云存储 Objective-SDK (iOS)](http://docs.qiniutek.com/v2/sdk/objc/) 或 [七牛云存储 Java-SDK(Android)](http://docs.qiniutek.com/v2/sdk/java/) 的相关上传函数或参照 [七牛云存储API之文件上传](http://docs.qiniutek.com/v2/api/io/#rs-PutFile) 往该 `remote_upload_url` 上传文件。这样,您的终端用户即可把数据(比如图片或视频)直接上传到七牛云存储服务器上无须经由您的服务端中转,而且在上传之前,七牛云存储做了智能加速,终端用户上传数据始终是离他物理距离最近的存储节点。当终端用户上传成功后,七牛云存储服务端会向您指定的 `callback_url` 发送回调数据。在此示例程序中,七牛云存储服务端会将一组关于终端用户上传的数据的属性信息通过 HTTP POST 以 `application/x-www-form-urlencoded` 编码的方式发送到 `http://api.example.com/notifications/qiniu-rs` 这个地址,假设该地址是您业务服务器用于接收处理回调信息的地址。
217
+ 如果您的网络程序是从云端(服务端程序)到终端(手持设备应用)的架构模型,且终端用户有使用您移动端App上传文件(比如照片或视频)的需求,可以把您服务器得到的此 `upload_token` 返回给手持设备端的App,然后您的移动 App 可以使用 [七牛云存储 Objective-SDK (iOS)](http://docs.qiniutek.com/v3/sdk/objc/) 或 [七牛云存储 Android-SDK](http://docs.qiniutek.com/v3/sdk/android/) 的相关上传函数或参照 [七牛云存储API之文件上传](http://docs.qiniutek.com/v3/api/io/#upload) 直传文件。这样,您的终端用户即可把数据(比如图片或视频)直接上传到七牛云存储服务器上无须经由您的服务端中转,而且在上传之前,七牛云存储做了智能加速,终端用户上传数据始终是离他物理距离最近的存储节点。当终端用户上传成功后,七牛云存储服务端会向您指定的 `callback_url` 发送回调数据。如果 `callback_url` 所在的服务处理完毕后输出 `JSON` 格式的数据,七牛云存储服务端会将该回调请求所得的响应信息原封不动地返回给终端应用程序。
168
218
 
169
219
 
170
220
  <a name="stat"></a>
@@ -288,7 +338,7 @@ key
288
338
 
289
339
  <a name="drop"></a>
290
340
 
291
- ### 删除所有文件(单个“表”)
341
+ ### 删除所有文件(单个 bucket)
292
342
 
293
343
  Qiniu::RS.drop(bucket)
294
344
 
@@ -412,7 +462,7 @@ keys
412
462
 
413
463
  调用 `Qiniu::RS.publish` 函数可以将您在七牛云存储中的资源表 `bucket` 发布到某个 `domain` 下,`domain` 需要在 DNS 管理里边 CNAME 到 `iovip.qbox.me` 。
414
464
 
415
- 这样,用户就可以通过 `http://<domain>/<key>` 来访问资源表 `bucket` 中的文件。键值为 `foo/bar/file` 的文件对应访问 URL 为 `http://<domain>/foo/bar/file`。 另外,`domain` 可以是一个真实的域名,比如 `www.example.com`,也可以是七牛云存储的二级路径,比如 `io.qbox.me/example` 。
465
+ 这样,用户就可以通过 `http://<domain>/<key>` 来访问资源表 `bucket` 中的文件。键值为 `foo/bar/file` 的文件对应访问 URL 为 `http://<domain>/foo/bar/file`。 另外,`domain` 可以是一个真实的域名,比如 `www.example.com`,也可以是七牛云存储的二级路径,比如 `iovip.qbox.me/example` 。
416
466
 
417
467
  例如:执行 `Qiniu::RS.publish("cdn.example.com", "EXAMPLE_BUCKET")` 后,那么键名为 `foo/bar/file` 的文件可以通过 `http://cdn.example.com/foo/bar/file` 访问。
418
468
 
@@ -445,6 +495,64 @@ domain
445
495
 
446
496
  如果撤销成功,返回 `true`,否则返回 `false` 。
447
497
 
498
+ <a name="buckets"></a>
499
+
500
+ ### Bucket(资源表)管理
501
+
502
+ <a name="mkbucket"></a>
503
+
504
+ #### 创建 Bucket
505
+
506
+ Qiniu::RS.mkbucket(bucket_name)
507
+
508
+ 可以通过 SDK 提供的 `Qiniu::RS.mkbucket` 函数创建一个 bucket(资源表)。
509
+
510
+ **参数**
511
+
512
+ bucket_name
513
+ : 必须,字符串类型(String),资源表 bucket 的名称。
514
+
515
+ **返回值**
516
+
517
+ 如果指定 bucket 创建成功,返回 `true`,否则返回 `false` 。
518
+
519
+ <a name="list-all-buckets"></a>
520
+
521
+ #### 列出所有 Bucket
522
+
523
+ Qiniu::RS.buckets
524
+
525
+ 可以通过 SDK 提供的 `Qiniu::RS.buckets` 函数列出当前登录客户的所有 buckets(资源表)。
526
+
527
+ **返回值**
528
+
529
+ 如果请求成功,返回一个 buckets 的列表(Array),否则返回 `false` 。
530
+
531
+ ["Bucket1", "Bucket2", …, "BucketN"]
532
+
533
+ <a name="set-protected"></a>
534
+
535
+ #### 访问控制
536
+
537
+ Qiniu::RS.set_protected(bucket_name, protected_mode)
538
+
539
+ 可以通过 SDK 提供的 `Qiniu::RS.set_protected` 函数来设置指定 bucket 的访问属性,一般在水印处理时作原图保护用。
540
+
541
+ **参数**
542
+
543
+ bucket_name
544
+ : 必须,字符串类型(String),指定资源表 bucket 的名称。
545
+
546
+ protected_mode
547
+ : 必须,整型,值为 1 或者 0,值为 1 表示启用保护模式,反之亦然。
548
+
549
+ 该函数不常用,一般在特殊场景下会用到。比如给图片打水印时,首先要设置原图保护,禁用公开的图像处理操作,采用水印的特殊图像处理,而保护原图就可以通过该函数操作实现。
550
+
551
+ **返回值**
552
+
553
+ 如果设置成功,返回 `true`,否则返回 `false` 。
554
+
555
+
448
556
  <a name="op-image"></a>
449
557
 
450
558
  ### 图像处理
@@ -517,7 +625,7 @@ url
517
625
  : 必须,字符串类型(String),图片的下载链接,需是 `Qiniu::RS.get`(或`Qiniu::RS.batch_get`)函数返回值中 `url` 字段的值,或者是 `Qiniu::RS.download`(或`Qiniu::RS.batch_download`)函数返回的下载链接。且文件本身必须是图片。
518
626
 
519
627
  spec
520
- : 可选,字符串或整型的枚举值,指定缩略图的具体规格,参考 [七牛云存储API之缩略图预览](/v2/api/foimg/#fo-imagePreview) 和 [自定义缩略图规格](/v2/api/foimg/#fo-imagePreviewEx) 。该值缺省为 0 (即输出宽800px高600px图片质量为85的缩略图)
628
+ : 可选,字符串或整型的枚举值,指定缩略图的具体规格,参考 [七牛云存储API之缩略图预览](/v3/api/foimg/#fo-imagePreview) 和 [自定义缩略图规格](/v3/api/foimg/#fo-imagePreviewEx) 。该值缺省为 0 (即输出宽800px高600px图片质量为85的缩略图)
521
629
 
522
630
  **返回值**
523
631
 
@@ -553,7 +661,7 @@ mogrify_options
553
661
  :auto_orient => <TrueOrFalse>
554
662
  }
555
663
 
556
- `Qiniu::RS.image_mogrify_preview_url()` 方法是对七牛云存储图像处理高级接口的完整包装,关于 `mogrify_options` 参数里边的具体含义和使用方式,可以参考文档:[图像处理高级接口](/v2/api/foimg/#fo-imageMogr)。
664
+ `Qiniu::RS.image_mogrify_preview_url()` 方法是对七牛云存储图像处理高级接口的完整包装,关于 `mogrify_options` 参数里边的具体含义和使用方式,可以参考文档:[图像处理高级接口](/v3/api/foimg/#fo-imageMogr)。
557
665
 
558
666
  **返回值**
559
667
 
@@ -594,7 +702,7 @@ mogrify_options
594
702
  :auto_orient => <TrueOrFalse>
595
703
  }
596
704
 
597
- `Qiniu::RS::Image.mogrify_preview_url()` 方法是对七牛云存储图像处理高级接口的完整包装,关于 `mogrify_options` 参数里边的具体含义和使用方式,可以参考文档:[图像处理高级接口](/v2/api/foimg/#fo-imageMogr)。
705
+ `Qiniu::RS::Image.mogrify_preview_url()` 方法是对七牛云存储图像处理高级接口的完整包装,关于 `mogrify_options` 参数里边的具体含义和使用方式,可以参考文档:[图像处理高级接口](/v3/api/foimg/#fo-imageMogr)。
598
706
 
599
707
  **返回值**
600
708
 
@@ -633,6 +741,229 @@ mogrify_options
633
741
  end
634
742
 
635
743
 
744
+ <a name="image-watermarking"></a>
745
+
746
+ ## 高级图像处理(水印)
747
+
748
+ <a name="watermarking-pre-work"></a>
749
+
750
+ ### 水印准备工作
751
+
752
+ 为了保护用户原图和方便用户访问打过水印之后的图片,在经水印作用之前,需进行以下一些设置:
753
+
754
+ 1. [设置原图保护](#watermarking-set-protected)
755
+ 2. [设置水印预览图URL分隔符](#watermarking-set-sep)
756
+ 3. [设置水印预览图规格别名](#watermarking-set-style)
757
+
758
+ <a name="watermarking-set-protected"></a>
759
+
760
+ #### 1. 设置原图保护
761
+
762
+ 用户的图片打上水印后,其原图不可见。通过给原图所在的 Bucket(资源表)设置访问控制,可以达到保护原图的目的,详情请参考 [Bucket(资源表)管理之访问控制](set-protected)。
763
+
764
+ 设置原图保护也可以借助七牛云存储提供的命令行辅助工具 [qboxrsctl](https://github.com/qiniu/devtools/tags) 来实现:
765
+
766
+ // 为<Bucket>下面的所有图片设置原图保护
767
+ qboxrsctl protected <Bucket> <Protected>
768
+
769
+ <a name="watermarking-set-sep"></a>
770
+
771
+ #### 2. 设置水印预览图URL分隔符
772
+
773
+ 没有设置水印前,用户可以通过如下公开链接的形式访问原图([创建公开外链后的情况下](/v3/api/io/#rs-Publish)):
774
+
775
+ http://<Domain>/<Key>
776
+
777
+ 设置水印后,其原图属性为私有,不能再通过这种形式访问。但是用户可以在原图的 `<Key>` 后面加上“分隔符”,以及相应的水印风格样式来访问打水印后的图片。例如,假设您为用户设定的访问水印图的分隔符为中划线 “-”,那么用户可以通过这种形式来访问打水印后的图片:
778
+
779
+ http://<Domain>/<Key>-/imageView/<Mode>/w/<Width>/h/<Height>/q/<Quality>/format/<Format>/sharpen/<Sharpen>/watermark/<HasWatermark>
780
+
781
+ 其中,`HasWatermark` 参数为 `0` (或者没有)表示不打水印,为 `1` 表示给图片打水印。
782
+
783
+ 通过 SDK 提供的 `Qiniu::RS.set_separator` 函数可以设置水印预览图URL分隔符:
784
+
785
+ Qiniu::RS.set_separator(bucket_name, separator)
786
+
787
+ **参数**
788
+
789
+ bucket_name
790
+ : 必须,字符串类型(String),图片所在的 Bucket(资源表) 名称
791
+
792
+ separator
793
+ : 必须,字符串类型(String),源图片与预览图规格之间的分割符
794
+
795
+ **返回值**
796
+
797
+ 操作成功返回 `true`,否则返回 `false`。
798
+
799
+ 除了使用 SDK 提供的方法,同样可以借助七牛云存储提供的命令行辅助工具 [qboxrsctl](https://github.com/qiniu/devtools/tags) 达到同样的目的:
800
+
801
+ // 设置预览图分隔符
802
+ qboxrsctl separator <Bucket> <Sep>
803
+
804
+ <a name="watermarking-set-style"></a>
805
+
806
+ #### 3. 设置水印预览图规格别名
807
+
808
+ 通过步骤2中所描述的水印预览图 URL 来访问打水印后的图片毕竟较为繁琐,因此可以通过为该水印预览图规格设置“别名”的形式来访问。如:
809
+
810
+ 别名(Name) | 规格(Style) | 说明
811
+ ----------- | ------------ | -------
812
+ small.jpg | imageView/0/w/120/h/90 | 大小为 120x90,不打水印
813
+ middle.jpg | imageView/0/w/440/h/330/watermark/1 | 大小为 440x330,打水印
814
+ large.jpg | imageView/0/w/1280/h/760/watermark/1 | 大小为 1280x760,打水印
815
+
816
+
817
+ SDK 提供了 `Qiniu::RS.set_style` 函数可以定义预览图规格别名,该函数原型如下:
818
+
819
+ Qiniu::RS.set_style(bucket, name, style)
820
+
821
+ **参数**
822
+
823
+ bucket
824
+ : 必须,字符串类型(String),图片所在的 Bucket(资源表) 名称
825
+
826
+ name
827
+ : 必须,字符串类型(String),预览图规格名称(别名)
828
+
829
+ style
830
+ : 必须,字符串类型(String),具体的规格样式
831
+
832
+ **返回值**
833
+
834
+ 操作成功返回 `true`,否则返回 `false` 。
835
+
836
+ 除了使用 SDK 提供的方法,同样也可以借助七牛云存储提供的命令行辅助工具 [qboxrsctl](https://github.com/qiniu/devtools/tags) 达到同样的目的:
837
+
838
+ // 为 <Buecket> 下面的所有图片设置名为 <Name> 的 <Style>
839
+ qboxrsctl style <Bucket> <Name> <Style>
840
+
841
+ 无论是通过 SDK 提供的方法还是命令行辅助工具操作,在设置完成后,即可通过通过以下方式来访问设定规格后的图片:
842
+
843
+ // 其中 “-” 为分隔符,“small.jpg” 为预览图规格别名
844
+ [GET] http://<Domain>/<Key>-small.jpg
845
+
846
+ // 其中 “!” 为分隔符,“middle.jpg” 为预览图规格别名
847
+ [GET] http://<Domain>/<Key>!middle.jpg
848
+
849
+ // 其中 “@” 为分隔符,“large.jpg” 为预览图规格别名
850
+ [GET] http://<Domain>/<Key>@large.jpg
851
+
852
+ 以上这些设置水印模板前的准备只需操作一次,即可对后续设置的所有水印模板生效。由于是一次性操作,建议使用 qboxrsctl 命令行辅助工具进行相关设置。
853
+
854
+ **取消水印预览图规格设置**
855
+
856
+ 您也可以为某个水印预览图规格取消“别名”设置,SDK 提供了相应的方法:
857
+
858
+ Qiniu::RS.unset_style(bucket, name)
859
+
860
+ **参数**
861
+
862
+ bucket
863
+ : 必须,字符串类型(String),图片所在的 Bucket(资源表) 名称
864
+
865
+ name
866
+ : 必须,字符串类型(String),预览图规格名称(别名)
867
+
868
+ **返回值**
869
+
870
+ 操作成功返回 `true`,否则返回 `false` 。
871
+
872
+ 除了使用 SDK 提供的方法,同样也可以借助七牛云存储提供的命令行辅助工具 [qboxrsctl](https://github.com/qiniu/devtools/tags) 达到同样的目的:
873
+
874
+ // 取消预览图规格别名为 <Name> 的 Style
875
+ qboxrsctl unstyle <Bucket> <Name>
876
+
877
+
878
+ <a name="watermarking-set-template"></a>
879
+
880
+ ### 设置水印模板
881
+
882
+ 给图片加水印,SDK 提供了设置水印模板的函数:`Qiniu::RS.set_watermark` ,通过该函数操作,客户方可以设置通用的水印模板,也可以为客户方的每一个终端用户分别设置一个水印模板。
883
+
884
+ `Qiniu::RS.set_watermark` 函数原型如下:
885
+
886
+ Qiniu::RS.set_watermark(customer_id, {
887
+ :font => <FontName>,
888
+ :fontsize => <FontSize>,
889
+ :fill => <FillColor>,
890
+ :text => <WatermarkText>,
891
+ :bucket => <LogoBucket>,
892
+ :dissolve => <Dissolve>,
893
+ :gravity => <Gravity>,
894
+ :dx => <DistanceX>,
895
+ :dy => <DistanceY>
896
+ })
897
+
898
+ **参数**:
899
+
900
+ 1. `customer_id = <EndUserID>`
901
+ : 客户方终端用户标识。如果`customer_id`为 `nil`,则表示设置默认水印模板。作为面向终端用户的服务提供商,您可以为不同的用户设置不同的水印模板,只需在设置水印模板的时候传入`customer_id`参数。如果该参数未设置,则表示为终端用户设置一个默认模板。举例:假如您为终端用户提供的是一个手机拍照软件,用户拍照后图片存储于七牛云存储服务器。为了给每个用户所上传的图片打上标有该用户用户名的水印,您可以为该用户设置一个水印模板,其水印文字可以是该终端用户的用户名。但如果您未给该终端用户设置模板,那么水印上的所有设置都是默认的(其文字部分可能是你们自己设置的企业标识)。该 `customer_id` 和 [Qiniu::RS.generate_upload_token](#generate-upload-token) 中的 `customer` 参数含义一致,结合这点,您很容易想明白为什么 `Qiniu::RS.generate_upload_token` 函数中会有 `customer` 这个可选参数还有 `Qiniu::RS.set_watermark` 函数中会有 `customer_id` 参考以及两者间的关系。
902
+
903
+ 2. `:font => <FontName>`
904
+ : 为水印上的文字设置一个默认的字体名,可选。
905
+
906
+ 3. `:fontsize => <FontSize>`
907
+ : 字体大小,可选,0表示默认,单位: 缇,等于 1/20 磅。
908
+
909
+ 4. `:fill => <FillColor>`
910
+ : 字体颜色,可选。
911
+
912
+ 5. `:text => <WatermarkText>`
913
+ : 水印文字,必须,图片用 \0 - \9 占位。
914
+
915
+ 6. `:bucket => <ImageFromBucket>`
916
+ : 如果水印中有图片,需要指定图片所在的 `RS Bucket` 名称,可选。
917
+
918
+ 7. `:dissolve => <Dissolve>`
919
+ : 透明度,可选,字符串,如50%。
920
+
921
+ 8. `:gravity => <Gravity>`
922
+ : 位置,可选,字符串,默认为右下角(SouthEast)。可选的值包括:NorthWest、North、NorthEast、West、Center、East、SouthWest、South和SouthEast。
923
+
924
+ 9. `:dx => <DistanceX>`
925
+ : 横向边距,可选,默认值为10,单位px。
926
+
927
+ 10. `:dy => <DistanceY>`
928
+ : 纵向边距,可选,默认值为10,单位px。
929
+
930
+ **返回值**
931
+
932
+ 操作成功返回 `true`,否则返回 `false` 。
933
+
934
+
935
+ <a name="watermarking-get-template"></a>
936
+
937
+ ### 获取水印模板
938
+
939
+ SDK 提供了 `Qiniu::RS.get_watermark` 函数获取指定终端用户或者缺省的水印模板。该函数原型如下:
940
+
941
+ Qiniu::RS.get_watermark(customer_id = nil)
942
+
943
+ **参数**
944
+
945
+ customer_id
946
+ : 客户方终端用户标识,可选,字符串类型,含义同 [Qiniu::RS.set_watermark](#watermarking-set-template) 函数中的 `customer_id` 参数。该值缺省为 `nil`,如果该值为 `nil`,则表示取默认的通用水印模板。
947
+
948
+ **返回值**
949
+
950
+ 如果请求成功,返回如下一段 Hash 结构的数据;否则返回 `false`。
951
+
952
+ {
953
+ font: <FontName>
954
+ fontsize: <FontSize>
955
+ fill: <FillColor>
956
+ text: <WatermarkText>
957
+ bucket: <LogoBucket>
958
+ dissolve: <Dissolve>
959
+ gravity: <Gravity>
960
+ dx: <DistanceX>
961
+ dy: <DistanceY>
962
+ }
963
+
964
+ 请求成功后返回数据的含义同 [设置水印模板](#watermarking-set-template) 时传入的参数一致。
965
+
966
+
636
967
  <a name="Contributing"></a>
637
968
 
638
969
  ## 贡献代码