From bacf83dd3c59427ac4bac5d1660ad0ad42f291d0 Mon Sep 17 00:00:00 2001 From: 404 Date: Tue, 6 Nov 2012 22:09:19 +0800 Subject: [PATCH] allow upload callback api --- docs/README.md | 16 +++++++++++++++- lib/qiniu/rs.rb | 1 + lib/qiniu/rs/version.rb | 2 +- lib/qiniu/tokens/upload_token.rb | 4 +++- spec/qiniu/rs_spec.rb | 6 +++--- 5 files changed, 23 insertions(+), 6 deletions(-) diff --git a/docs/README.md b/docs/README.md index 00f1e61..5ae1cc5 100644 --- a/docs/README.md +++ b/docs/README.md @@ -120,7 +120,8 @@ title: Ruby SDK 使用指南 | 七牛云存储 :expires_in => expires_in_seconds, :callback_url => callback_url, :callback_body_type => callback_body_type, - :customer => end_user_id + :customer => end_user_id, + :escape => allow_upload_callback_api **参数** @@ -139,6 +140,19 @@ title: Ruby SDK 使用指南 | 七牛云存储 :customer : 可选,字符串类型(String),客户方终端用户(End User)的ID,该字段可以用来标示一个文件的属主,这在一些特殊场景下(比如给终端用户上传的图片打上名字水印)非常有用。 +:escape +: 可选,数字类型,可选值 0 或者 1,缺省为 0 。值为 1 表示 callback 传递的自定义数据中允许存在转义符号 `$(VarExpression)`,参考 [VarExpression](/v3/api/words/#VarExpression)。 + +当 `escape` 的值为 `1` 时,常见的转义语法如下: + +- 若 `callbackBodyType` 为 `application/json` 时,一个典型的自定义回调数据([CallbackParams](/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))为: + + `foo=bar&w=$(imageInfo.width)&h=$(imageInfo.height)&exif=$(exif)` + **返回值** 返回一个字符串类型(String)的用于上传文件用的临时授权 `upload_token`。 diff --git a/lib/qiniu/rs.rb b/lib/qiniu/rs.rb index f826a44..0f70a8d 100755 --- a/lib/qiniu/rs.rb +++ b/lib/qiniu/rs.rb @@ -224,6 +224,7 @@ module Qiniu #token_obj.callback_url = opts[:callback_url] #token_obj.callback_body_type = opts[:callback_body_type] #token_obj.customer = opts[:customer] + #token_obj.escape = opts[:escape] token_obj.generate_token end diff --git a/lib/qiniu/rs/version.rb b/lib/qiniu/rs/version.rb index eb073b7..03918d0 100755 --- a/lib/qiniu/rs/version.rb +++ b/lib/qiniu/rs/version.rb @@ -5,7 +5,7 @@ module Qiniu module Version MAJOR = 3 MINOR = 1 - PATCH = 0 + PATCH = 1 # Returns a version string by joining MAJOR, MINOR, and PATCH with '.' # # Example diff --git a/lib/qiniu/tokens/upload_token.rb b/lib/qiniu/tokens/upload_token.rb index 5fb22b3..bb13af4 100755 --- a/lib/qiniu/tokens/upload_token.rb +++ b/lib/qiniu/tokens/upload_token.rb @@ -10,7 +10,7 @@ module Qiniu include Utils - attr_accessor :scope, :expires_in, :callback_url, :callback_body_type, :customer + attr_accessor :scope, :expires_in, :callback_url, :callback_body_type, :customer, :escape def initialize(opts = {}) @scope = opts[:scope] @@ -18,6 +18,7 @@ module Qiniu @callback_url = opts[:callback_url] @callback_body_type = opts[:callback_body_type] @customer = opts[:customer] + @escape = opts[:escape] end def generate_signature @@ -25,6 +26,7 @@ module Qiniu params[:callbackUrl] = @callback_url if !@callback_url.nil? && !@callback_url.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 urlsafe_base64_encode(params.to_json) end diff --git a/spec/qiniu/rs_spec.rb b/spec/qiniu/rs_spec.rb index 8204b18..a5f3a27 100755 --- a/spec/qiniu/rs_spec.rb +++ b/spec/qiniu/rs_spec.rb @@ -116,7 +116,7 @@ module Qiniu context ".upload_file" do it "should works" do - uptoken_opts = {:scope => @bucket} + uptoken_opts = {:scope => @bucket, :escape => 0} upload_opts = { :uptoken => Qiniu::RS.generate_upload_token(uptoken_opts), :file => __FILE__, @@ -137,7 +137,7 @@ module Qiniu File.open(localfile, "w"){|f| 5242888.times{f.write(Random.rand(9).to_s)}} key = Digest::SHA1.hexdigest(localfile+Time.now.to_s) # generate the upload token - uptoken_opts = {:scope => @bucket, :expires_in => 3600, :customer => "awhy.xu@gmail.com"} + uptoken_opts = {:scope => @bucket, :expires_in => 3600, :customer => "awhy.xu@gmail.com", :escape => 0} uptoken = Qiniu::RS.generate_upload_token(uptoken_opts) # uploading upload_opts = { @@ -311,7 +311,7 @@ module Qiniu context ".generate_upload_token" do it "should works" do - data = Qiniu::RS.generate_upload_token({:scope => 'test_bucket', :expires_in => 3600}) + data = Qiniu::RS.generate_upload_token({:scope => 'test_bucket', :expires_in => 3600, :escape => 0}) data.should_not be_empty puts data.inspect end