diff --git a/Gemfile.lock b/Gemfile.lock
index 45c38ca..47939be 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -1,7 +1,7 @@
PATH
remote: .
specs:
- qiniu-rs (3.1.0)
+ qiniu-rs (3.1.1)
json (~> 1.7)
mime-types (~> 1.19)
rest-client (~> 1.6)
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/eu_spec.rb b/spec/qiniu/rs/eu_spec.rb
index 8c6f03f..ff7558e 100755
--- a/spec/qiniu/rs/eu_spec.rb
+++ b/spec/qiniu/rs/eu_spec.rb
@@ -1,7 +1,7 @@
# -*- encoding: utf-8 -*-
require 'spec_helper'
-require 'qiniu/rs/io'
+require 'qiniu/rs'
require 'qiniu/rs/pub'
require 'qiniu/rs/eu'
@@ -14,12 +14,15 @@ module Qiniu
@bucket = "wm_test_bucket"
@key = "image_logo_for_test.png"
+ result = Qiniu::RS.mkbucket(@bucket)
+ puts result.inspect
+ result.should be_true
+
local_file = File.expand_path('../' + @key, __FILE__)
upopts = {:scope => @bucket, :expires_in => 3600, :customer => @customer_id}
uptoken = Qiniu::RS.generate_upload_token(upopts)
- code, data = Qiniu::RS::IO.upload_with_token(uptoken, local_file, @bucket, @key, nil, nil, nil, true)
- code.should == 200
+ data = Qiniu::RS.upload_file :uptoken => uptoken, :file => local_file, :bucket => @bucket, :key => @key
puts data.inspect
code2, data2 = Qiniu::RS::Pub.set_separator(@bucket, "-")
@@ -31,10 +34,12 @@ module Qiniu
puts data3.inspect
end
- #after :all do
- # result = Qiniu::RS.drop(@bucket)
- # result.should_not be_false
- #end
+ after :all do
+ @bucket = "wm_test_bucket"
+ result = Qiniu::RS.drop(@bucket)
+ puts result.inspect
+ result.should_not be_false
+ end
context ".set_watermark" do
it "should works" do
diff --git a/spec/qiniu/rs/image_spec.rb b/spec/qiniu/rs/image_spec.rb
index c01ab00..b65f463 100755
--- a/spec/qiniu/rs/image_spec.rb
+++ b/spec/qiniu/rs/image_spec.rb
@@ -10,35 +10,20 @@ module Qiniu
describe Image do
before :all do
-=begin
- code, data = Qiniu::RS::Auth.exchange_by_password!("test@qbox.net", "test")
- 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
- puts data.inspect
-=end
@bucket = "test_images_12345"
@key = "image_logo_for_test.png"
- local_file = File.expand_path('../' + @key, __FILE__)
-
- result = Qiniu::RS.drop(@bucket)
- result.should_not be_false
+ result = Qiniu::RS.mkbucket(@bucket)
puts result.inspect
-
- put_url = Qiniu::RS.put_auth(10)
- put_url.should_not be_false
- put_url.should_not be_empty
- result = Qiniu::RS.upload :url => put_url,
- :file => local_file,
- :bucket => @bucket,
- :key => @key,
- :enable_crc32_check => true
result.should be_true
+ local_file = File.expand_path('../' + @key, __FILE__)
+
+ upopts = {:scope => @bucket, :expires_in => 3600, :customer => "awhy.xu@gmail.com"}
+ uptoken = Qiniu::RS.generate_upload_token(upopts)
+ data = Qiniu::RS.upload_file :uptoken => uptoken, :file => local_file, :bucket => @bucket, :key => @key
+ puts data.inspect
result = Qiniu::RS.get(@bucket, @key)
result["url"].should_not be_empty
@@ -56,6 +41,13 @@ module Qiniu
}
end
+ after :all do
+ @bucket = "test_images_12345"
+ result = Qiniu::RS.drop(@bucket)
+ puts result.inspect
+ result.should_not be_false
+ end
+
context ".info" do
it "should works" do
code, data = Qiniu::RS::Image.info(@source_image_url)
diff --git a/spec/qiniu/rs/io_spec.rb b/spec/qiniu/rs/io_spec.rb
index ac80a4a..70abd7f 100755
--- a/spec/qiniu/rs/io_spec.rb
+++ b/spec/qiniu/rs/io_spec.rb
@@ -10,17 +10,19 @@ module Qiniu
describe IO do
before :all do
-=begin
- code, data = Qiniu::RS::Auth.exchange_by_password!("test@qbox.net", "test")
- 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
- puts data.inspect
-=end
- @bucket = "test"
+ @bucket = "io_test_bucket"
@key = Digest::SHA1.hexdigest (Time.now.to_i+rand(100)).to_s
+
+ result = Qiniu::RS.mkbucket(@bucket)
+ puts result.inspect
+ result.should be_true
+ end
+
+ after :all do
+ @bucket = "io_test_bucket"
+ result = Qiniu::RS.drop(@bucket)
+ puts result.inspect
+ result.should_not be_false
end
context ".upload_file" do
diff --git a/spec/qiniu/rs/pub_spec.rb b/spec/qiniu/rs/pub_spec.rb
index df70e99..3fd3a88 100755
--- a/spec/qiniu/rs/pub_spec.rb
+++ b/spec/qiniu/rs/pub_spec.rb
@@ -10,24 +10,16 @@ module Qiniu
describe Pub do
before :all do
- @bucket = "test123"
- code, data = Qiniu::RS::RS.mkbucket(@bucket)
- code.should == 200
- puts data.inspect
+ @bucket = "pub_test_bucket"
+ result = Qiniu::RS.mkbucket(@bucket)
+ puts result.inspect
+ result.should_not be_false
end
-=begin
- context ".mkbucket" do
- it "should works" do
- code, data = Qiniu::RS::RS.mkbucket(@bucket)
- code.should == 200
- puts data.inspect
- end
- end
-=end
-
after :all do
+ @bucket = "pub_test_bucket"
result = Qiniu::RS.drop(@bucket)
+ puts result.inspect
result.should_not be_false
end
diff --git a/spec/qiniu/rs/rs_spec.rb b/spec/qiniu/rs/rs_spec.rb
index ec8e936..101916d 100755
--- a/spec/qiniu/rs/rs_spec.rb
+++ b/spec/qiniu/rs/rs_spec.rb
@@ -11,13 +11,19 @@ module Qiniu
describe RS do
before :all do
-
- @bucket = "test_bucket_1234"
+ @bucket = "rs_test_bucket"
@key = Digest::SHA1.hexdigest (Time.now.to_i+rand(100)).to_s
- @domain = 'iovip.qbox.me/test'
+ @domain = 'rs-test-bucket.dn.qbox.me'
code, data = Qiniu::RS::RS.mkbucket(@bucket)
- puts data.inspect
+ puts [code, data].inspect
+ code.should == 200
+ end
+
+ after :all do
+ @bucket = "rs_test_bucket"
+ code, data = Qiniu::RS::RS.drop(@bucket)
+ puts [code, data].inspect
code.should == 200
end
diff --git a/spec/qiniu/rs/up_spec.rb b/spec/qiniu/rs/up_spec.rb
index ccd623e..a0e12c9 100755
--- a/spec/qiniu/rs/up_spec.rb
+++ b/spec/qiniu/rs/up_spec.rb
@@ -12,12 +12,22 @@ module Qiniu
before :all do
@localfile = "bigfile.txt"
File.open(@localfile, "w"){|f| 9437184.times{f.write(Random.rand(9).to_s)}}
- @bucket = "test"
+ @bucket = "up_test_bucket"
@key = Digest::SHA1.hexdigest(@localfile+Time.now.to_s)
+
+ code, data = Qiniu::RS::RS.mkbucket(@bucket)
+ puts [code, data].inspect
+ code.should == 200
end
after :all do
+ @localfile = "bigfile.txt"
File.unlink(@localfile) if File.exists?(@localfile)
+
+ @bucket = "up_test_bucket"
+ code, data = Qiniu::RS::RS.drop(@bucket)
+ puts [code, data].inspect
+ code.should == 200
end
context ".upload_with_token" do
diff --git a/spec/qiniu/rs_spec.rb b/spec/qiniu/rs_spec.rb
index 8204b18..39c94c8 100755
--- a/spec/qiniu/rs_spec.rb
+++ b/spec/qiniu/rs_spec.rb
@@ -10,13 +10,33 @@ module Qiniu
before :all do
@bucket = 'qiniu_rs_test'
@key = Digest::SHA1.hexdigest Time.now.to_s
- @domain = 'cdn.example.com'
-
- @test_image_bucket = 'test_images_12345'
- @test_image_key = 'image_logo_for_test.png'
+ @domain = 'qiniu-rs-test.dn.qbox.me'
result = Qiniu::RS.mkbucket(@bucket)
result.should_not be_false
+
+ @test_image_bucket = 'test_images_12345'
+ result2 = Qiniu::RS.mkbucket(@test_image_bucket)
+ puts result2.inspect
+ result2.should be_true
+
+ @test_image_key = 'image_logo_for_test.png'
+ local_file = File.expand_path('./rs/' + @test_image_key, File.dirname(__FILE__))
+ puts local_file.inspect
+ upopts = {:scope => @test_image_bucket, :expires_in => 3600, :customer => "awhy.xu@gmail.com"}
+ uptoken = Qiniu::RS.generate_upload_token(upopts)
+ data = Qiniu::RS.upload_file :uptoken => uptoken, :file => local_file, :bucket => @test_image_bucket, :key => @test_image_key
+ puts data.inspect
+ end
+
+ after :all do
+ result = Qiniu::RS.drop(@bucket)
+ puts result.inspect
+ result.should_not be_false
+
+ result2 = Qiniu::RS.drop(@test_image_bucket)
+ puts result2.inspect
+ result2.should_not be_false
end
context ".buckets" do
@@ -116,7 +136,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 +157,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 +331,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
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index b9fe532..d886e24 100755
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -14,10 +14,5 @@ RSpec.configure do |config|
:up_host => "http://m1.qbox.me:13019",
:pub_host => "http://m1.qbox.me:13012",
:eu_host => "http://m1.qbox.me:13050"
-
-=begin
- Qiniu::RS.establish_connection! :access_key => "aPoWOtE9EFca1fLxFCtlkeZAOV7aADVMTLdSydmr",
- :secret_key => "L3ShtjCQTCagVCDPfHJoOix7JO_o3qHz3ScyflUG"
-=end
end
end