qiniu-rs 2.3.3 → 3.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +10 -10
- data/README.md +2 -2
- data/docs/README.md +372 -41
- data/lib/qiniu/rs.rb +56 -5
- data/lib/qiniu/rs/config.rb +3 -0
- data/lib/qiniu/rs/eu.rb +22 -0
- data/lib/qiniu/rs/io.rb +8 -0
- data/lib/qiniu/rs/pub.rb +37 -0
- data/lib/qiniu/rs/rs.rb +8 -0
- data/lib/qiniu/rs/utils.rb +8 -21
- data/lib/qiniu/rs/version.rb +1 -1
- data/lib/qiniu/tokens/qbox_token.rb +2 -1
- data/lib/qiniu/tokens/upload_token.rb +6 -4
- data/qiniu-rs.gemspec +3 -3
- data/spec/qiniu/rs/auth_spec.rb +2 -2
- data/spec/qiniu/rs/eu_spec.rb +60 -0
- data/spec/qiniu/rs/io_spec.rb +11 -1
- data/spec/qiniu/rs/pub_spec.rb +68 -0
- data/spec/qiniu/rs/rs_spec.rb +21 -18
- data/spec/qiniu/rs_spec.rb +81 -9
- data/spec/spec_helper.rb +13 -1
- metadata +15 -9
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
qiniu-rs (
|
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.
|
21
|
-
rspec-core (~> 2.
|
22
|
-
rspec-expectations (~> 2.
|
23
|
-
rspec-mocks (~> 2.
|
24
|
-
rspec-core (2.
|
25
|
-
rspec-expectations (2.
|
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.
|
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
|
37
|
-
rspec (~> 2.
|
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/
|
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/
|
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](/
|
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
|
-
- [
|
19
|
-
- [
|
20
|
-
- [
|
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
|
-
- [
|
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.
|
149
|
+
通过 `Qiniu::RS.upload_file()` 方法可在客户方的业务服务器上直接往七牛云存储上传文件。该函数规格如下:
|
103
150
|
|
104
|
-
Qiniu::RS.
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
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
|
184
|
+
: 可选,Boolean 类型,是否启用文件上传 crc32 校验,缺省为 false 。
|
130
185
|
|
131
186
|
**返回值**
|
132
187
|
|
133
|
-
|
134
|
-
|
135
|
-
**针对 NotFound 处理**
|
188
|
+
上传成功,返回如下一个 Hash,否则返回 `false`:
|
136
189
|
|
137
|
-
|
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
|
-
|
194
|
+
##### 针对 NotFound 场景处理
|
144
195
|
|
145
|
-
|
196
|
+
您可以上传一个应对 HTTP 404 出错处理的文件,当您 [创建公开外链](#publish) 后,若公开的外链找不到该文件,即可使用您上传的“自定义404文件”代替之。要这么做,您只须使用 `Qiniu::RS.upload_file` 函数上传一个 `key` 为固定字符串类型的值 `errno-404` 即可。
|
146
197
|
|
147
|
-
|
198
|
+
除了使用 SDK 提供的方法,同样也可以借助七牛云存储提供的命令行辅助工具 [qboxrsctl](https://github.com/qiniu/devtools/tags) 达到同样的目的:
|
148
199
|
|
149
|
-
|
200
|
+
qboxrsctl put <Bucket> <Key> <LocalFile>
|
150
201
|
|
151
|
-
|
202
|
+
将其中的 `<Key>` 换作 `errno-404` 即可。
|
152
203
|
|
153
|
-
|
154
|
-
: 可选,整型,用于设置上传 URL 的有效期,单位:秒,缺省为 3600 秒
|
204
|
+
注意,每个 `<Bucket>` 里边有且只有一个 `errno-404` 文件,上传多个,最后的那一个会覆盖前面所有的。
|
155
205
|
|
156
|
-
|
157
|
-
: 可选,字符串类型(String),用于设置文件往这个 URL 上传成功后,七牛云存储服务端要回调客户方的业务服务器地址。
|
206
|
+
<a name="upload-client-side"></a>
|
158
207
|
|
159
|
-
|
208
|
+
#### 客户端直传文件
|
160
209
|
|
161
|
-
|
210
|
+
客户端上传流程和服务端上传类似,差别在于:客户端直传文件所需的 `upload_token` 可以选择在客户方的业务服务器端生成,也可以选择在客户方的客户端程序里边生成。选择前者,可以和客户方的业务揉合得更紧密和安全些,比如防伪造请求。
|
162
211
|
|
163
|
-
|
212
|
+
简单来讲,客户端上传流程也分为两步:
|
164
213
|
|
165
|
-
|
214
|
+
1. 获取 `upload_token`([用于上传文件的临时授权凭证](#generate-upload-token))
|
215
|
+
2. 将该 `upload_token` 作为文件上传流 `multipart/form-data` 中的一部分实现上传操作
|
166
216
|
|
167
|
-
如果您的网络程序是从云端(服务端程序)到终端(手持设备应用)的架构模型,且终端用户有使用您移动端App上传文件(比如照片或视频)的需求,可以把您服务器得到的此 `
|
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`,也可以是七牛云存储的二级路径,比如 `
|
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之缩略图预览](/
|
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` 参数里边的具体含义和使用方式,可以参考文档:[图像处理高级接口](/
|
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` 参数里边的具体含义和使用方式,可以参考文档:[图像处理高级接口](/
|
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
|
## 贡献代码
|