mirror of
https://github.com/wahyd4/ruby-sdk.git
synced 2026-08-09 21:06:19 +10:00
Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
98b1dc4fac | ||
|
|
67f7011777 | ||
|
|
f699236afd | ||
|
|
cfa75c7e28 | ||
|
|
a031645e3c | ||
|
|
a86786b76c | ||
|
|
c77ec97620 | ||
|
|
d62fba8290 | ||
|
|
35b1682096 | ||
|
|
5aa5934da7 | ||
|
|
c86e22395b | ||
|
|
ede5f2400a | ||
|
|
5a5adc79f9 | ||
|
|
fdfee5c2bb | ||
|
|
4106a5ddc6 | ||
|
|
3bb30f1b4f | ||
|
|
55daca055e | ||
|
|
672b8d18cc | ||
|
|
83f7939510 | ||
|
|
c506e410b6 | ||
|
|
a7dbcbcee8 | ||
|
|
4548061f87 | ||
|
|
4d7dc24c60 | ||
|
|
ff86b2ac50 | ||
|
|
f1461c338e | ||
|
|
67280b714e | ||
|
|
8f86e6903a | ||
|
|
47cf54069d | ||
|
|
0bb4edcade | ||
|
|
b1e6235b2e | ||
|
|
e5d2367a27 | ||
|
|
3186ba40df | ||
|
|
c5708424b9 | ||
|
|
f85ee1159b | ||
|
|
804c7609ef | ||
|
|
49ab640493 | ||
|
|
85f8e68399 | ||
|
|
7dbec75553 | ||
|
|
3299d2bd02 | ||
|
|
ec8c50383b | ||
|
|
9cc157c21d | ||
|
|
3d40d4e967 | ||
|
|
fa85e838fc | ||
|
|
38970b66e3 | ||
|
|
63ccf3f2dc | ||
|
|
5c011aa816 |
+3
-5
@@ -3,13 +3,11 @@ rvm:
|
||||
- 1.8.7
|
||||
- 1.9.2
|
||||
- 1.9.3
|
||||
- 2.0.0
|
||||
- jruby-18mode
|
||||
- jruby-19mode
|
||||
- rbx-18mode
|
||||
- rbx-19mode
|
||||
- ruby-head
|
||||
- jruby-head
|
||||
- ree
|
||||
before_script:
|
||||
- export QINIU_ACCESS_KEY=iN7NgwM31j4-BZacMjPrOQBs34UG1maYCAQmhdCV
|
||||
- export QINIU_SECRET_KEY=6QTOr2Jg1gcZEWDQXKOGZh5PziC2MCV5KsntT70j
|
||||
- export QINIU_ACCESS_KEY=LGRqJsjX7LAvtdtX6hhyxs861lS57HwnOQmJsOuX
|
||||
- export QINIU_SECRET_KEY=g_OxhuN5iJ1O7BoA6YdXyF6zSszk34UZFKDfdIIW
|
||||
|
||||
+25
-4
@@ -1,14 +1,35 @@
|
||||
## CHANGE LOG
|
||||
|
||||
### v3.4.9
|
||||
|
||||
- 去掉publish和unpublish接口的封装函数。 [https://github.com/qiniu/ruby-sdk/pull/89](https://github.com/qiniu/ruby-sdk/pull/89) (#8143)
|
||||
|
||||
### v3.4.8
|
||||
|
||||
- 修复断点续上传功能中一直重试上传出错片的Bug。[https://github.com/qiniu/ruby-sdk/pull/87](https://github.com/qiniu/ruby-sdk/pull/87) (#7205)
|
||||
|
||||
### v3.4.7
|
||||
|
||||
- 停止追加新功能,仅进行Bug修正维护。
|
||||
|
||||
### v3.4.6
|
||||
|
||||
- `Qiniu::RS.generate_download_token()` 方法的 `:pattern` 调整为必选项。
|
||||
|
||||
### v3.4.5
|
||||
|
||||
- `Qiniu::RS.generate_upload_token()` 方法新增 `:callback_body` 和 `return_url` 选项。
|
||||
- 选项含义参考: <http://developer.qiniu.com/docs/v6/api/reference/security/put-policy.html#put-policy-callback-body>
|
||||
|
||||
### v3.4.2
|
||||
|
||||
- `Qiniu::RS.generate_upload_token()` 方法新增 `:return_body` 选项。
|
||||
|
||||
该选项(`:return_body`)可设置文件上传成功后,执行七牛云存储规定的回调API,并以 JSON 响应格式返回其执行结果。参考 [uploadToken 之 returnBody 说明](http://docs.qiniutek.com/v3/api/io/#uploadToken-returnBody)。
|
||||
该选项(`:return_body`)可设置文件上传成功后,执行七牛云存储规定的回调API,并以 JSON 响应格式返回其执行结果。参考 [uploadToken 之 returnBody 说明](http://developer.qiniu.com/docs/v6/api/reference/security/put-policy.html#put-policy-return-body)。
|
||||
|
||||
### v3.4.1
|
||||
|
||||
增加为上传文件进行预转的选项,参见 [uploadToken 之 asyncOps 说明](http://docs.qiniutek.com/v3/api/io/#uploadToken-asyncOps)
|
||||
增加为上传文件进行预转的选项,参见 [uploadToken 之 asyncOps 说明](http://docs.qiniu.com/api/v6/put.html#uploadToken-asyncOps)
|
||||
|
||||
- `Qiniu::RS.generate_upload_token()` 方法新增 `:async_options` 选项用于进行预转操作。
|
||||
|
||||
@@ -35,9 +56,9 @@ Ruby 宿主环境如下
|
||||
|
||||
### v3.3.0
|
||||
|
||||
私有资源下载新版实现,添加 Qiniu::RS.generate_download_token() 方法。参考 [downloadToken](http://docs.qiniutek.com/v3/api/io/#get)
|
||||
私有资源下载新版实现,添加 Qiniu::RS.generate_download_token() 方法。参考 [downloadToken](http://developer.qiniu.com/docs/v6/api/reference/security/download-token.html)
|
||||
|
||||
详见 [Ruby SDK 使用文档之私有资源下载](http://docs.qiniutek.com/v3/sdk/ruby/#download-private-files)
|
||||
详见 [Ruby SDK 使用文档之私有资源下载](http://developer.qiniu.com/docs/v6/api/overview/dn/security.html)
|
||||
|
||||
### v3.2.2
|
||||
|
||||
|
||||
+3
-3
@@ -1,7 +1,7 @@
|
||||
PATH
|
||||
remote: .
|
||||
specs:
|
||||
qiniu-rs (3.4.2)
|
||||
qiniu-rs (3.4.9)
|
||||
json (~> 1.7)
|
||||
mime-types (~> 1.19)
|
||||
rest-client (~> 1.6)
|
||||
@@ -12,8 +12,8 @@ GEM
|
||||
specs:
|
||||
diff-lcs (1.1.3)
|
||||
fakeweb (1.3.0)
|
||||
json (1.7.6)
|
||||
mime-types (1.20.1)
|
||||
json (1.8.1)
|
||||
mime-types (1.23)
|
||||
rake (10.0.3)
|
||||
rest-client (1.6.7)
|
||||
mime-types (>= 1.16)
|
||||
|
||||
@@ -1,8 +1,13 @@
|
||||
# Qiniu Resource (Cloud) Storage SDK for Ruby - [](https://travis-ci.org/qiniu/ruby-sdk) [](https://gemnasium.com/why404/qiniu-rs-for-ruby)
|
||||
# Qiniu Resource (Cloud) Storage SDK for Ruby
|
||||
|
||||
# 版本说明
|
||||
|
||||
此版本不再进行技术升级,仅做Bug修正维护。
|
||||
请移步 [https://github.com/qiniu/ruby-sdk](https://github.com/qiniu/ruby-sdk) 查看最新版本。
|
||||
|
||||
# 关于
|
||||
|
||||
此 Ruby SDK 适用于 Ruby 1.8.x, 1.9.x, jruby, rbx, ree 版本,基于 [七牛云存储官方API](http://docs.qiniutek.com/v3/api/) 构建。使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上。无论您的网络应用是一个网站程序,还是包括从云端(服务端程序)到终端(手持设备应用)的架构的服务或应用,通过七牛云存储及其 SDK,都能让您应用程序的终端用户高速上传和下载,同时也让您的服务端更加轻盈。
|
||||
此 Ruby SDK 适用于 Ruby 1.8.x, 1.9.x, jruby, rbx, ree 版本,基于 [七牛云存储官方API](http://developer.qiniu.com/docs/v6/index.html) 构建。使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上。无论您的网络应用是一个网站程序,还是包括从云端(服务端程序)到终端(手持设备应用)的架构的服务或应用,通过七牛云存储及其 SDK,都能让您应用程序的终端用户高速上传和下载,同时也让您的服务端更加轻盈。
|
||||
|
||||
## 安装
|
||||
|
||||
@@ -20,7 +25,7 @@
|
||||
|
||||
## 使用
|
||||
|
||||
参考文档:[七牛云存储 Ruby SDK 使用指南](http://docs.qiniutek.com/v3/sdk/ruby/)
|
||||
参考文档:[七牛云存储 Ruby SDK 使用指南](http://developer.qiniu.com/docs/v6/sdk/ruby-sdk.html)
|
||||
|
||||
## 贡献代码
|
||||
|
||||
|
||||
+24
-22
@@ -1,12 +1,10 @@
|
||||
---
|
||||
title: Ruby SDK 使用指南 | 七牛云存储
|
||||
title: Ruby SDK
|
||||
---
|
||||
|
||||
# Ruby SDK 使用指南
|
||||
此 Ruby SDK 适用于 Ruby 1.8.x, 1.9.x, jruby, rbx, ree 版本,基于 [七牛云存储官方API](http://docs.qiniu.com/) 构建。使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上。无论您的网络应用是一个网站程序,还是包括从云端(服务端程序)到终端(手持设备应用)的架构的服务或应用,通过七牛云存储及其 SDK,都能让您应用程序的终端用户高速上传和下载,同时也让您的服务端更加轻盈。
|
||||
|
||||
此 Ruby SDK 适用于 Ruby 1.8.x, 1.9.x, jruby, rbx, ree 版本,基于 [七牛云存储官方API](/v3/api/) 构建。使用此 SDK 构建您的网络应用程序,能让您以非常便捷地方式将数据安全地存储到七牛云存储上。无论您的网络应用是一个网站程序,还是包括从云端(服务端程序)到终端(手持设备应用)的架构的服务或应用,通过七牛云存储及其 SDK,都能让您应用程序的终端用户高速上传和下载,同时也让您的服务端更加轻盈。
|
||||
|
||||
七牛云存储 Ruby SDK 源码地址:<https://github.com/qiniu/ruby-sdk> [](https://travis-ci.org/qiniu/ruby-sdk) [](https://gemnasium.com/why404/qiniu-rs-for-ruby)
|
||||
七牛云存储 Ruby SDK 源码地址:<https://github.com/qiniu/ruby-sdk>
|
||||
|
||||
**目录**
|
||||
|
||||
@@ -76,8 +74,8 @@ title: Ruby SDK 使用指南 | 七牛云存储
|
||||
|
||||
要接入七牛云存储,您需要拥有一对有效的 Access Key 和 Secret Key 用来进行签名认证。可以通过如下步骤获得:
|
||||
|
||||
1. [开通七牛开发者帐号](https://dev.qiniutek.com/signup)
|
||||
2. [登录七牛开发者自助平台,查看 Access Key 和 Secret Key](https://dev.qiniutek.com/account/keys) 。
|
||||
1. [开通七牛开发者帐号](https://portal.qiniu.com/signup)
|
||||
2. [登录七牛开发者自助平台,查看 Access Key 和 Secret Key](https://portal.qiniu.com/setting/key)
|
||||
|
||||
在获取到 Access Key 和 Secret Key 之后,您可以在您的程序中调用如下两行代码进行初始化对接:
|
||||
|
||||
@@ -110,7 +108,7 @@ title: Ruby SDK 使用指南 | 七牛云存储
|
||||
|
||||
### 文件上传
|
||||
|
||||
**注意**:如果您只是想要上传已存在您电脑本地或者是服务器上的文件到七牛云存储,可以直接使用七牛提供的 [qrsync](/v3/tools/qrsync/) 上传工具。如果是需要通过您的网站或是移动应用(App)上传文件,则可以接入使用此 SDK,详情参考如下文档说明。
|
||||
**注意**:如果您只是想要上传已存在您电脑本地或者是服务器上的文件到七牛云存储,可以直接使用七牛提供的 [qrsync](http://docs.qiniu.com/tools/qrsync.html) 上传工具。如果是需要通过您的网站或是移动应用(App)上传文件,则可以接入使用此 SDK,详情参考如下文档说明。
|
||||
|
||||
<a name="generate-upload-token"></a>
|
||||
|
||||
@@ -123,6 +121,7 @@ title: Ruby SDK 使用指南 | 七牛云存储
|
||||
Qiniu::RS.generate_upload_token :scope => target_bucket,
|
||||
:expires_in => expires_in_seconds,
|
||||
:callback_url => callback_url,
|
||||
:callback_body => callback_body,
|
||||
:callback_body_type => callback_body_type,
|
||||
:customer => end_user_id,
|
||||
:escape => allow_upload_callback_api,
|
||||
@@ -140,6 +139,9 @@ title: Ruby SDK 使用指南 | 七牛云存储
|
||||
:callback_url
|
||||
: 可选,字符串类型(String),用于设置文件上传成功后,七牛云存储服务端要回调客户方的业务服务器地址。
|
||||
|
||||
:callback_body
|
||||
: 可选,字符串类型(String),用于设置文件上传成功后,七牛云存储服务端向客户方的业务服务器发送回调请求的值。
|
||||
|
||||
:callback_body_type
|
||||
: 可选,字符串类型(String),用于设置文件上传成功后,七牛云存储服务端向客户方的业务服务器发送回调请求的 `Content-Type`。
|
||||
|
||||
@@ -147,15 +149,15 @@ title: Ruby SDK 使用指南 | 七牛云存储
|
||||
: 可选,字符串类型(String),客户方终端用户(End User)的ID,该字段可以用来标示一个文件的属主,这在一些特殊场景下(比如给终端用户上传的图片打上名字水印)非常有用。
|
||||
|
||||
:escape
|
||||
: 可选,数字类型,可选值 0 或者 1,缺省为 0 。值为 1 表示 callback 传递的自定义数据中允许存在转义符号 `$(VarExpression)`,参考 [VarExpression](/v3/api/words/#VarExpression)。
|
||||
: 可选,数字类型,可选值 0 或者 1,缺省为 0 。值为 1 表示 callback 传递的自定义数据中允许存在转义符号 `$(VarExpression)`,参考 [VarExpression](http://docs.qiniutek.com/v3/api/words/#VarExpression)。
|
||||
|
||||
当 `escape` 的值为 `1` 时,常见的转义语法如下:
|
||||
|
||||
- 若 `callbackBodyType` 为 `application/json` 时,一个典型的自定义回调数据([CallbackParams](/v3/api/io/#CallbackParams))为:
|
||||
- 若 `callbackBodyType` 为 `application/json` 时,一个典型的自定义回调数据([CallbackParams](http://docs.qiniutek.com/v3/api/io/#CallbackParams))为:
|
||||
|
||||
`{foo: "bar", w: $(imageInfo.width), h: $(imageInfo.height), exif: $(exif)}`
|
||||
|
||||
- 若 `callbackBodyType` 为 `application/x-www-form-urlencoded` 时,一个典型的自定义回调数据([CallbackParams](/v3/api/io/#CallbackParams))为:
|
||||
- 若 `callbackBodyType` 为 `application/x-www-form-urlencoded` 时,一个典型的自定义回调数据([CallbackParams](http://docs.qiniutek.com/v3/api/io/#CallbackParams))为:
|
||||
|
||||
`foo=bar&w=$(imageInfo.width)&h=$(imageInfo.height)&exif=$(exif)`
|
||||
|
||||
@@ -163,7 +165,7 @@ title: Ruby SDK 使用指南 | 七牛云存储
|
||||
: 可选,字符串类型(String),用于设置文件上传成功后,执行指定的预转指令。参考 [uploadToken 之 asyncOps 说明](http://docs.qiniutek.com/v3/api/io/#uploadToken-asyncOps)
|
||||
|
||||
:return_body
|
||||
: 可选,字符串类型(String),用于设置文件上传成功后,执行七牛云存储规定的回调API,并以 JSON 响应格式返回其执行结果。参考 [uploadToken 之 returnBody 说明](/v3/api/io/#uploadToken-returnBody)。
|
||||
: 可选,字符串类型(String),用于设置文件上传成功后,执行七牛云存储规定的回调API,并以 JSON 响应格式返回其执行结果。参考 [uploadToken 之 returnBody 说明](http://docs.qiniutek.com/v3/api/io/#uploadToken-returnBody)。
|
||||
|
||||
|
||||
**返回值**
|
||||
@@ -227,7 +229,7 @@ title: Ruby SDK 使用指南 | 七牛云存储
|
||||
|
||||
##### 开启断点续上传
|
||||
|
||||
无需任何额外改动,SDK 提供的 `Qiniu::RS.upload_file()` 方法缺省支持断点续上传。默认情况下,SDK 会自动启用断点续上传的方式来上传超过 4MB 大小的文件。您也可以在 [应用接入](/v3/sdk/ruby/#establish_connection!) 时通过修改缺省配置来设置该阀值:
|
||||
无需任何额外改动,SDK 提供的 `Qiniu::RS.upload_file()` 方法缺省支持断点续上传。默认情况下,SDK 会自动启用断点续上传的方式来上传超过 4MB 大小的文件。您也可以在 [应用接入](http://docs.qiniutek.com/v3/sdk/ruby/#establish_connection!) 时通过修改缺省配置来设置该阀值:
|
||||
|
||||
Qiniu::RS.establish_connection! :access_key => YOUR_APP_ACCESS_KEY,
|
||||
:secret_key => YOUR_APP_SECRET_KEY,
|
||||
@@ -270,9 +272,9 @@ title: Ruby SDK 使用指南 | 七牛云存储
|
||||
简单来讲,客户端上传流程分为两步:
|
||||
|
||||
1. [服务端生成上传授权凭证(uploadToken)](#generate-upload-token)
|
||||
2. 客户端程序调用 [iOS](/v3/sdk/objc/) / [Android](/v3/sdk/android/) SDK 的文件上传方法进行上传
|
||||
2. 客户端程序调用 [iOS](http://docs.qiniu.com/ios-sdk/index.html) / [Android](http://docs.qiniu.com/android-sdk/index.html) SDK 的文件上传方法进行上传
|
||||
|
||||
如果是网页直传文件到七牛云存储,网页可以使用 JavaScript 动态实现 [七牛云存储上传API](/v3/api/io/#upload-file-by-html-form)。
|
||||
如果是网页直传文件到七牛云存储,网页可以使用 JavaScript 动态实现 [七牛云存储上传API](http://docs.qiniutek.com/v3/api/io/#upload-file-by-html-form)。
|
||||
|
||||
通过客户端直传文件,您的终端用户即可把数据(比如图片或视频)直接上传到七牛云存储服务器上,而无须经由您的服务端中转,终端用户上传数据始终是离他物理距离最近的七牛存储节点。当终端用户上传成功后,七牛云存储服务端会向您指定的 `callback_url` (一般在 [uploadToken](#generate-upload-token) 里边指定)发送回调数据(回调数据在客户端程序里边指定)。如果 `callback_url` 所指向的服务端处理完毕后输出 `JSON` 格式的数据,七牛云存储服务端会将该回调请求所得的 JSON 响应信息原封不动地返回给客户端应用程序。
|
||||
|
||||
@@ -297,9 +299,9 @@ title: Ruby SDK 使用指南 | 七牛云存储
|
||||
|
||||
[GET] http://<绑定域名>/<key>
|
||||
|
||||
绑定域名可以是自定义域名,可以在 [七牛云存储开发者自助网站](https://dev.qiniutek.com/buckets) 进行域名绑定操作。
|
||||
绑定域名可以是自定义域名,可以在 [七牛云存储开发者自助网站](https://portal.qiniu.com/) 进行域名绑定操作。
|
||||
|
||||
注意,尖括号不是必需,代表替换项。
|
||||
**注意**,尖括号不是必需,代表替换项。
|
||||
|
||||
<a name="download-private-files"></a>
|
||||
|
||||
@@ -328,7 +330,7 @@ expires_in
|
||||
: 可选,数字类型,用于设置上传 URL 的有效期,单位:秒,缺省为 3600 秒,即 1 小时后该下载授权凭证(downloadToken)不再有效。
|
||||
|
||||
pattern
|
||||
: 必须,字符串类型,用于设置可匹配的下载链接。参考:[downloadToken pattern 详解](/v3/api/io/#download-token-pattern)
|
||||
: 必选,字符串类型,用于设置可匹配的下载链接。参考:[downloadToken pattern 详解](http://docs.qiniutek.com/v3/api/io/#download-token-pattern)
|
||||
|
||||
|
||||
<a name="other-download-features"></a>
|
||||
@@ -339,7 +341,7 @@ pattern
|
||||
|
||||
##### 断点续下载
|
||||
|
||||
七牛云存储支持标准的断点续下载,参考:[云存储API之断点续下载](/v3/api/io/#download-by-range-bytes)
|
||||
七牛云存储支持标准的断点续下载,参考:[云存储API之断点续下载](http://docs.qiniu.com/api/get.html#download-by-range-bytes)
|
||||
|
||||
<a name="upload-file-for-not-found"></a>
|
||||
|
||||
@@ -347,7 +349,7 @@ pattern
|
||||
|
||||
您可以上传一个应对 HTTP 404 出错处理的文件,当用户访问一个不存在的文件时,即可使用您上传的“自定义404文件”代替之。要这么做,您只须使用 `Qiniu::RS.upload_file` 函数上传一个 `key` 为固定字符串类型的值 `errno-404` 即可。
|
||||
|
||||
除了使用 SDK 提供的方法,同样也可以借助七牛云存储提供的命令行辅助工具 [qboxrsctl](/v3/tools/qboxrsctl/) 达到同样的目的:
|
||||
除了使用 SDK 提供的方法,同样也可以借助七牛云存储提供的命令行辅助工具 [qboxrsctl](http://docs.qiniu.com/tools/qboxrsctl.html) 达到同样的目的:
|
||||
|
||||
qboxrsctl put <Bucket> <Key> <LocalFile>
|
||||
|
||||
@@ -687,7 +689,7 @@ mogrify_options
|
||||
:auto_orient => <TrueOrFalse>
|
||||
}
|
||||
|
||||
`Qiniu::RS.image_mogrify_preview_url()` 方法是对七牛云存储图像处理高级接口的完整包装,关于 `mogrify_options` 参数里边的具体含义和使用方式,可以参考文档:[图像处理高级接口](/v3/api/foimg/#fo-imageMogr)。
|
||||
`Qiniu::RS.image_mogrify_preview_url()` 方法是对七牛云存储图像处理高级接口的完整包装,关于 `mogrify_options` 参数里边的具体含义和使用方式,可以参考文档:[图像处理高级接口](http://docs.qiniu.com/api/image-process.html#imageMogr)。
|
||||
|
||||
**返回值**
|
||||
|
||||
@@ -727,7 +729,7 @@ mogrify_options
|
||||
:auto_orient => <TrueOrFalse>
|
||||
}
|
||||
|
||||
`Qiniu::RS::Image.mogrify_preview_url()` 方法是对七牛云存储图像处理高级接口的完整包装,关于 `mogrify_options` 参数里边的具体含义和使用方式,可以参考文档:[图像处理高级接口](/v3/api/foimg/#fo-imageMogr)。
|
||||
`Qiniu::RS::Image.mogrify_preview_url()` 方法是对七牛云存储图像处理高级接口的完整包装,关于 `mogrify_options` 参数里边的具体含义和使用方式,可以参考文档:[图像处理高级接口](http://docs.qiniu.com/api/image-process.html#imageMogr)
|
||||
|
||||
**返回值**
|
||||
|
||||
|
||||
+2
-12
@@ -182,12 +182,12 @@ module Qiniu
|
||||
end
|
||||
|
||||
def batch_copy(*args)
|
||||
code, data = RS.batch_copy(args)
|
||||
code, data = RS.batch_copy(*args)
|
||||
code == StatusOK
|
||||
end
|
||||
|
||||
def batch_move(*args)
|
||||
code, data = RS.batch_move(args)
|
||||
code, data = RS.batch_move(*args)
|
||||
code == StatusOK
|
||||
end
|
||||
|
||||
@@ -204,16 +204,6 @@ module Qiniu
|
||||
code == StatusOK ? data : false
|
||||
end
|
||||
|
||||
def publish(domain, bucket)
|
||||
code, data = RS.publish(domain, bucket)
|
||||
code == StatusOK
|
||||
end
|
||||
|
||||
def unpublish(domain)
|
||||
code, data = RS.unpublish(domain)
|
||||
code == StatusOK
|
||||
end
|
||||
|
||||
def drop(bucket)
|
||||
code, data = RS.drop(bucket)
|
||||
code == StatusOK
|
||||
|
||||
+1
-66
@@ -8,78 +8,13 @@ module Qiniu
|
||||
class << self
|
||||
include Utils
|
||||
|
||||
def exchange_by_password!(username, password)
|
||||
@username = username
|
||||
@password = password
|
||||
post_data = {
|
||||
:client_id => Config.settings[:client_id],
|
||||
:grant_type => "password",
|
||||
:username => username,
|
||||
:password => password
|
||||
}
|
||||
code, data = http_request Config.settings[:auth_url], post_data
|
||||
reset_token(data["access_token"], data["refresh_token"]) if Utils.is_response_ok?(code)
|
||||
[code, data]
|
||||
end
|
||||
|
||||
def exchange_by_refresh_token!(refresh_token)
|
||||
post_data = {
|
||||
:client_id => Config.settings[:client_id],
|
||||
:grant_type => "refresh_token",
|
||||
:refresh_token => refresh_token
|
||||
}
|
||||
code, data = http_request Config.settings[:auth_url], post_data
|
||||
reset_token(data["access_token"], data["refresh_token"]) if Utils.is_response_ok?(code)
|
||||
[code, data]
|
||||
end
|
||||
|
||||
def reset_token(access_token, refresh_token)
|
||||
@access_token = access_token
|
||||
@refresh_token = refresh_token
|
||||
end
|
||||
|
||||
def call_with_logged_in(url, data, retry_times = 0)
|
||||
raise MissingAccessToken if @access_token.nil?
|
||||
code, data = http_request url, data, {:access_token => @access_token}
|
||||
if code == 401
|
||||
raise MissingRefreshToken if @refresh_token.nil?
|
||||
code, data = exchange_by_refresh_token!(@refresh_token)
|
||||
if code == 401
|
||||
raise MissingUsernameOrPassword if (@username.nil? || @password.nil?)
|
||||
code, data = exchange_by_password!(@username, @password)
|
||||
end
|
||||
if Utils.is_response_ok?(code)
|
||||
retry_times += 1
|
||||
if Config.settings[:auto_reconnect] && retry_times < Config.settings[:max_retry_times]
|
||||
return call_with_logged_in(url, data, retry_times)
|
||||
end
|
||||
end
|
||||
end
|
||||
[code, data]
|
||||
end
|
||||
|
||||
def call_with_signature(url, data, retry_times = 0, options = {})
|
||||
code, data = http_request url, data, options.merge({:qbox_signature_token => generate_qbox_signature(url, data)})
|
||||
code, data = http_request url, data, options.merge({:qbox_signature_token => generate_qbox_signature(url, data, options[:mime])})
|
||||
[code, data]
|
||||
end
|
||||
|
||||
def request(url, data = nil, options = {})
|
||||
begin
|
||||
if Config.settings[:access_key].empty? || Config.settings[:secret_key].empty?
|
||||
code, data = Auth.call_with_logged_in(url, data)
|
||||
else
|
||||
code, data = Auth.call_with_signature(url, data, 0, options)
|
||||
end
|
||||
rescue MissingAccessToken => e
|
||||
Log.logger.error e
|
||||
code, data = 401, {}
|
||||
rescue MissingRefreshToken => e
|
||||
Log.logger.error e
|
||||
code, data = 401, {}
|
||||
rescue MissingUsernameOrPassword => e
|
||||
Log.logger.error e
|
||||
code, data = 401, {}
|
||||
end
|
||||
[code, data]
|
||||
end
|
||||
|
||||
|
||||
@@ -20,9 +20,9 @@ module Qiniu
|
||||
:method => :post,
|
||||
:content_type => 'application/x-www-form-urlencoded',
|
||||
:auth_url => "https://acc.qbox.me/oauth2/token",
|
||||
:rs_host => "http://rs.qbox.me",
|
||||
:rs_host => "http://rs.qiniu.com",
|
||||
:io_host => "http://iovip.qbox.me",
|
||||
:up_host => "http://up.qbox.me",
|
||||
:up_host => "http://up.qiniu.com",
|
||||
:pub_host => "http://pu.qbox.me:10200",
|
||||
:eu_host => "http://eu.qbox.me",
|
||||
:client_id => "a75604760c4da4caaa456c0c5895c061c3065c5a",
|
||||
|
||||
+2
-12
@@ -40,16 +40,6 @@ module Qiniu
|
||||
Auth.request Config.settings[:rs_host] + '/delete/' + encode_entry_uri(bucket, key)
|
||||
end
|
||||
|
||||
def publish(domain, bucket)
|
||||
encoded_domain = Utils.urlsafe_base64_encode(domain)
|
||||
Auth.request Config.settings[:rs_host] + "/publish/#{encoded_domain}/from/#{bucket}"
|
||||
end
|
||||
|
||||
def unpublish(domain)
|
||||
encoded_domain = Utils.urlsafe_base64_encode(domain)
|
||||
Auth.request Config.settings[:rs_host] + "/unpublish/#{encoded_domain}"
|
||||
end
|
||||
|
||||
def drop(bucket)
|
||||
Auth.request Config.settings[:rs_host] + "/drop/#{bucket}"
|
||||
end
|
||||
@@ -60,7 +50,7 @@ module Qiniu
|
||||
encoded_uri = encode_entry_uri(bucket, key)
|
||||
execs << "op=/#{command}/#{encoded_uri}"
|
||||
end
|
||||
Auth.request Config.settings[:rs_host] + "/batch?" + execs.join("&")
|
||||
Auth.request Config.settings[:rs_host] + "/batch", execs.join("&"), {:mime => "application/x-www-form-urlencoded" }
|
||||
end
|
||||
|
||||
def batch_get(bucket, keys)
|
||||
@@ -108,7 +98,7 @@ module Qiniu
|
||||
op_args.each do |e|
|
||||
execs << 'op=' + _generate_cp_or_mv_opstr(command, e[0], e[1], e[2], e[3]) if e.size == 4
|
||||
end
|
||||
Auth.request Config.settings[:rs_host] + "/batch?" + execs.join("&")
|
||||
Auth.request Config.settings[:rs_host] + "/batch", execs.join("&"), {:mime => "application/x-www-form-urlencoded" }
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -200,6 +200,8 @@ module Qiniu
|
||||
break
|
||||
elsif i == retry_times && data["crc32"] != body_crc32
|
||||
Log.logger.error %Q(Uploading block error. Expected crc32: #{body_crc32}, but got: #{data["crc32"]})
|
||||
# 上传重试达到上限,直接返回错误
|
||||
return [code, data]
|
||||
end
|
||||
end
|
||||
elsif progress[:offset] + progress[:restsize] != block_size
|
||||
@@ -230,6 +232,8 @@ module Qiniu
|
||||
break
|
||||
elsif i == retry_times && data["crc32"] != body_crc32
|
||||
Log.logger.error %Q(Uploading block error. Expected crc32: #{body_crc32}, but got: #{data["crc32"]})
|
||||
# 上传重试达到上限,直接返回错误
|
||||
return [code, data]
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -127,7 +127,7 @@ module Qiniu
|
||||
File.open(filepath, "rb") { |f| Zlib.crc32 f.read }
|
||||
end
|
||||
|
||||
def generate_qbox_signature(url, params)
|
||||
def generate_qbox_signature(url, params, mime = nil)
|
||||
access_key = Config.settings[:access_key]
|
||||
secret_key = Config.settings[:secret_key]
|
||||
uri = URI.parse(url)
|
||||
@@ -139,6 +139,9 @@ module Qiniu
|
||||
params_string = generate_query_string(params)
|
||||
signature += params_string
|
||||
end
|
||||
if mime.is_a?(String) && mime == "application/x-www-form-urlencoded" && params.is_a?(String)
|
||||
signature += params
|
||||
end
|
||||
hmac = HMAC::SHA1.new(secret_key)
|
||||
hmac.update(signature)
|
||||
encoded_digest = urlsafe_base64_encode(hmac.digest)
|
||||
|
||||
@@ -5,7 +5,7 @@ module Qiniu
|
||||
module Version
|
||||
MAJOR = 3
|
||||
MINOR = 4
|
||||
PATCH = 2
|
||||
PATCH = 10
|
||||
# Returns a version string by joining <tt>MAJOR</tt>, <tt>MINOR</tt>, and <tt>PATCH</tt> with <tt>'.'</tt>
|
||||
#
|
||||
# Example
|
||||
|
||||
@@ -13,7 +13,7 @@ module Qiniu
|
||||
attr_accessor :pattern, :expires_in
|
||||
|
||||
def initialize(opts = {})
|
||||
@pattern = opts[:pattern] || "*"
|
||||
@pattern = opts[:pattern]
|
||||
@expires_in = opts[:expires_in] || 3600
|
||||
end
|
||||
|
||||
|
||||
@@ -10,27 +10,31 @@ module Qiniu
|
||||
|
||||
include Utils
|
||||
|
||||
attr_accessor :scope, :expires_in, :callback_url, :callback_body_type, :customer, :escape, :async_options, :return_body
|
||||
attr_accessor :scope, :expires_in, :callback_url, :callback_body, :callback_body_type, :customer, :escape, :async_options, :return_body, :return_url
|
||||
|
||||
def initialize(opts = {})
|
||||
@scope = opts[:scope]
|
||||
@expires_in = opts[:expires_in] || 3600
|
||||
@callback_url = opts[:callback_url]
|
||||
@callback_body = opts[:callback_body]
|
||||
@callback_body_type = opts[:callback_body_type]
|
||||
@customer = opts[:customer]
|
||||
@escape = opts[:escape]
|
||||
@async_options = opts[:async_options]
|
||||
@return_body = opts[:return_body]
|
||||
@return_url = opts[:return_url]
|
||||
end
|
||||
|
||||
def generate_signature
|
||||
params = {:scope => @scope, :deadline => Time.now.to_i + @expires_in}
|
||||
params[:callbackUrl] = @callback_url if !@callback_url.nil? && !@callback_url.empty?
|
||||
params[:callbackBody] = @callback_body if !@callback_body.nil? && !@callback_body.empty?
|
||||
params[:callbackBodyType] = @callback_body_type if !@callback_body_type.nil? && !@callback_body_type.empty?
|
||||
params[:customer] = @customer if !@customer.nil? && !@customer.empty?
|
||||
params[:escape] = 1 if @escape == 1 || @escape == true
|
||||
params[:asyncOps] = @async_options if !@async_options.nil? && !@async_options.empty?
|
||||
params[:returnBody] = @return_body if !@return_body.nil? && !@return_body.empty?
|
||||
params[:returnUrl] = @return_url if !@return_url.nil? && !@return_url.empty?
|
||||
Utils.urlsafe_base64_encode(params.to_json)
|
||||
end
|
||||
|
||||
|
||||
+4
-4
@@ -4,10 +4,10 @@ require File.expand_path('../lib/qiniu/rs/version', __FILE__)
|
||||
|
||||
Gem::Specification.new do |gem|
|
||||
gem.authors = ["why404"]
|
||||
gem.email = ["why404@gmail.com"]
|
||||
gem.description = %q{Qiniu Resource (Cloud) Storage SDK for Ruby. See: http://docs.qiniutek.com/v3/sdk/ruby/}
|
||||
gem.summary = %q{Qiniu Resource (Cloud) Storage SDK for Ruby}
|
||||
gem.homepage = "https://github.com/qiniu/ruby-sdk"
|
||||
gem.email = ["sdk@qiniu.com"]
|
||||
gem.description = %q{Deprecated Qiniu Resource (Cloud) Storage SDK for Ruby. Please use new SDK https://rubygems.org/gems/qiniu}
|
||||
gem.summary = %q{Deprecated Qiniu Resource (Cloud) Storage SDK for Ruby}
|
||||
gem.homepage = "https://github.com/qiniu/ruby-sdk/tree/qiniu-rs"
|
||||
|
||||
gem.files = `git ls-files`.split($\)
|
||||
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
||||
|
||||
@@ -1,58 +0,0 @@
|
||||
# -*- encoding: utf-8 -*-
|
||||
|
||||
require 'spec_helper'
|
||||
require 'qiniu/rs/auth'
|
||||
|
||||
module Qiniu
|
||||
module RS
|
||||
describe Auth do
|
||||
|
||||
before :all do
|
||||
@username = "qboxtest"
|
||||
@password = "qboxtest123"
|
||||
|
||||
code, data = Qiniu::RS::Auth.exchange_by_password!(@username, @password)
|
||||
code.should == 200
|
||||
data.should be_an_instance_of(Hash)
|
||||
data["access_token"].should_not be_empty
|
||||
data["refresh_token"].should_not be_empty
|
||||
data["refresh_token"].should_not be_empty
|
||||
|
||||
@access_token = data["access_token"]
|
||||
@refresh_token = data["refresh_token"]
|
||||
puts data.inspect
|
||||
end
|
||||
|
||||
context ".exchange_by_password" do
|
||||
it "should sign in failed when pass a non-existent username" do
|
||||
code, data = Qiniu::RS::Auth.exchange_by_password!("a_non_existent_user@example.com", "password")
|
||||
code.should == 401
|
||||
data["error_code"].should == 11
|
||||
data["error"].should == "failed_authentication"
|
||||
puts data.inspect
|
||||
end
|
||||
|
||||
it "should sign in failed when pass a wrong password" do
|
||||
code, data = Qiniu::RS::Auth.exchange_by_password!(@username, "a-wrong-password")
|
||||
code.should == 401
|
||||
data["error_code"].should == 11
|
||||
data["error"].should == "failed_authentication"
|
||||
puts data.inspect
|
||||
end
|
||||
end
|
||||
|
||||
context ".exchange_by_refresh_token" do
|
||||
it "should works" do
|
||||
@refresh_token.should_not be_empty
|
||||
code, data = Qiniu::RS::Auth.exchange_by_refresh_token!(@refresh_token)
|
||||
code.should == 200
|
||||
data["access_token"].should_not be_empty
|
||||
data["refresh_token"].should_not be_empty
|
||||
data["expires_in"].should_not be_zero
|
||||
puts data.inspect
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
end
|
||||
end
|
||||
+20
-33
@@ -92,19 +92,24 @@ module Qiniu
|
||||
|
||||
context ".batch_copy" do
|
||||
it "should works" do
|
||||
code, data = Qiniu::RS::RS.batch_copy [@bucket, @key, @bucket, @key2]
|
||||
code, data = Qiniu::RS::RS.batch_copy @bucket, @key, @bucket, @key2
|
||||
code.should == 200
|
||||
puts data.inspect
|
||||
|
||||
#code2, data2 = Qiniu::RS::RS.stat(@bucket, @key2)
|
||||
#code2.should == 200
|
||||
#puts data2.inspect
|
||||
#
|
||||
code, data = Qiniu::RS::RS.delete(@bucket, @key2)
|
||||
code.should == 200
|
||||
puts data.inspect
|
||||
|
||||
end
|
||||
end
|
||||
|
||||
context ".batch_move" do
|
||||
it "should works" do
|
||||
code, data = Qiniu::RS::RS.batch_move [@bucket, @key, @bucket, @key2]
|
||||
code, data = Qiniu::RS::RS.batch_move @bucket, @key, @bucket, @key2
|
||||
code.should == 200
|
||||
puts data.inspect
|
||||
|
||||
@@ -112,42 +117,12 @@ module Qiniu
|
||||
#code2.should == 200
|
||||
#puts data2.inspect
|
||||
|
||||
code3, data3 = Qiniu::RS::RS.batch_move [@bucket, @key2, @bucket, @key]
|
||||
code3, data3 = Qiniu::RS::RS.batch_move @bucket, @key2, @bucket, @key
|
||||
code3.should == 200
|
||||
puts data3.inspect
|
||||
end
|
||||
end
|
||||
|
||||
=begin
|
||||
context ".publish" do
|
||||
it "should works" do
|
||||
code, data = Qiniu::RS::RS.publish(@domain, @bucket)
|
||||
code.should == 200
|
||||
puts data.inspect
|
||||
end
|
||||
end
|
||||
|
||||
context ".unpublish" do
|
||||
it "should works" do
|
||||
code, data = Qiniu::RS::RS.unpublish(@domain)
|
||||
code.should == 200
|
||||
puts data.inspect
|
||||
end
|
||||
end
|
||||
=end
|
||||
|
||||
context ".copy" do
|
||||
it "should works" do
|
||||
code, data = Qiniu::RS::RS.copy(@bucket, @key, @bucket, @key2)
|
||||
code.should == 200
|
||||
puts data.inspect
|
||||
|
||||
#code2, data2 = Qiniu::RS::RS.stat(@bucket, @key2)
|
||||
#code2.should == 200
|
||||
#puts data2.inspect
|
||||
end
|
||||
end
|
||||
|
||||
context ".move" do
|
||||
it "should works" do
|
||||
code, data = Qiniu::RS::RS.move(@bucket, @key, @bucket, @key2)
|
||||
@@ -164,6 +139,18 @@ module Qiniu
|
||||
end
|
||||
end
|
||||
|
||||
context ".copy" do
|
||||
it "should works" do
|
||||
code, data = Qiniu::RS::RS.copy(@bucket, @key, @bucket, @key2)
|
||||
code.should == 200
|
||||
puts data.inspect
|
||||
|
||||
#code2, data2 = Qiniu::RS::RS.stat(@bucket, @key2)
|
||||
#code2.should == 200
|
||||
#puts data2.inspect
|
||||
end
|
||||
end
|
||||
|
||||
context ".delete" do
|
||||
it "should works" do
|
||||
code, data = Qiniu::RS::RS.delete(@bucket, @key)
|
||||
|
||||
+16
-34
@@ -32,9 +32,6 @@ module Qiniu
|
||||
end
|
||||
|
||||
after :all do
|
||||
#result = Qiniu::RS.unpublish(@domain)
|
||||
#result.should_not be_false
|
||||
|
||||
result1 = Qiniu::RS.drop(@bucket)
|
||||
puts result1.inspect
|
||||
result1.should_not be_false
|
||||
@@ -278,57 +275,32 @@ module Qiniu
|
||||
end
|
||||
end
|
||||
|
||||
=begin
|
||||
context ".publish" do
|
||||
it "should works" do
|
||||
result = Qiniu::RS.publish(@domain, @bucket)
|
||||
result.should_not be_false
|
||||
end
|
||||
end
|
||||
=end
|
||||
|
||||
=begin
|
||||
context ".unpublish" do
|
||||
it "should works" do
|
||||
result = Qiniu::RS.unpublish(@domain)
|
||||
result.should_not be_false
|
||||
end
|
||||
end
|
||||
=end
|
||||
|
||||
context ".batch_copy" do
|
||||
it "should works" do
|
||||
result = Qiniu::RS.batch_copy [@bucket, @key, @bucket, @key2]
|
||||
result = Qiniu::RS.batch_copy @bucket, @key, @bucket, @key2
|
||||
result.should_not be_false
|
||||
|
||||
#result2 = Qiniu::RS.stat(@bucket, @key2)
|
||||
#result2.should_not be_false
|
||||
|
||||
result = Qiniu::RS.delete @bucket, @key2
|
||||
result.should_not be_false
|
||||
end
|
||||
end
|
||||
|
||||
context ".batch_move" do
|
||||
it "should works" do
|
||||
result = Qiniu::RS::RS.batch_move [@bucket, @key, @bucket, @key2]
|
||||
result = Qiniu::RS.batch_move @bucket, @key, @bucket, @key2
|
||||
result.should_not be_false
|
||||
|
||||
#result2 = Qiniu::RS.stat(@bucket, @key2)
|
||||
#result2.should_not be_false
|
||||
|
||||
result3 = Qiniu::RS.batch_move [@bucket, @key2, @bucket, @key]
|
||||
result3 = Qiniu::RS.batch_move @bucket, @key2, @bucket, @key
|
||||
result3.should_not be_false
|
||||
end
|
||||
end
|
||||
|
||||
context ".copy" do
|
||||
it "should works" do
|
||||
result = Qiniu::RS.copy(@bucket, @key, @bucket, @key2)
|
||||
result.should_not be_false
|
||||
|
||||
#result2 = Qiniu::RS.stat(@bucket, @key2)
|
||||
#result2.should_not be_false
|
||||
end
|
||||
end
|
||||
|
||||
context ".move" do
|
||||
it "should works" do
|
||||
result = Qiniu::RS.move(@bucket, @key, @bucket, @key2)
|
||||
@@ -342,6 +314,16 @@ module Qiniu
|
||||
end
|
||||
end
|
||||
|
||||
context ".copy" do
|
||||
it "should works" do
|
||||
result = Qiniu::RS.copy(@bucket, @key, @bucket, @key2)
|
||||
result.should_not be_false
|
||||
|
||||
#result2 = Qiniu::RS.stat(@bucket, @key2)
|
||||
#result2.should_not be_false
|
||||
end
|
||||
end
|
||||
|
||||
context ".delete" do
|
||||
it "should works" do
|
||||
result = Qiniu::RS.delete(@bucket, @key)
|
||||
|
||||
Reference in New Issue
Block a user