aliyunoss 0.1.2 → 0.1.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.
- checksums.yaml +4 -4
- data/Gemfile +1 -3
- data/aliyunoss.gemspec +3 -0
- data/lib/aliyunoss/#oss_request.rb# +154 -0
- data/lib/aliyunoss/api.rb +24 -24
- data/lib/aliyunoss/bucket.rb +1 -1
- data/lib/aliyunoss/extension.rb +1 -1
- data/lib/aliyunoss/oss_request.rb +11 -6
- data/lib/aliyunoss/version.rb +1 -1
- data/spec/aliyunoss/api_spec.rb +2 -1
- data/spec/aliyunoss/bucket_spec.rb +1 -1
- data/spec/aliyunoss/oss_request_spec.rb +1 -1
- metadata +18 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0859a2ea3ada1c1b72d5aa4bf7c19b475f2eee2
|
4
|
+
data.tar.gz: 3097869be179d2db30cf5c62cbac7f30994bc0bc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dedf4b7a770d1cf47d24433121c873906be73773d80910a018f445f7e61a50eb9dba647d824d36747275113cb3ef9e6467d4bd6bb90657aff484ab8ee678f062
|
7
|
+
data.tar.gz: cf277b1cb70111c855c9a997e523940d5198f60290196db1b67c8bd6b4d3ae755e96dd5a9768bde540490c035f386b7668c5c31f08429a1f65ee5f24b600781c
|
data/Gemfile
CHANGED
data/aliyunoss.gemspec
CHANGED
@@ -18,7 +18,10 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
+
spec.add_runtime_dependency 'nokogiri', '~> 1.6'
|
22
|
+
|
21
23
|
spec.add_development_dependency "bundler", "~> 1.7"
|
22
24
|
spec.add_development_dependency "rake", "~> 10.0"
|
23
25
|
spec.add_development_dependency "rspec", "~> 3.1"
|
26
|
+
|
24
27
|
end
|
@@ -0,0 +1,154 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require 'base64'
|
3
|
+
require 'openssl'
|
4
|
+
|
5
|
+
module Aliyun
|
6
|
+
module Oss
|
7
|
+
|
8
|
+
class OssRequest
|
9
|
+
|
10
|
+
include ConfigHelper
|
11
|
+
attr_accessor :bucket, :path, :body, :queris, :domain
|
12
|
+
|
13
|
+
def initialize(bucket, path, domain = nil, queries = {}, headers = {})
|
14
|
+
@bucket = bucket
|
15
|
+
@path = path
|
16
|
+
@queries = queries
|
17
|
+
@domain = domain
|
18
|
+
@headers = {"Content-Type" => "", "Content-MD5" => "", "Date" => Time.now.utc.strftime('%a, %d %b %Y %H:%M:%S GMT')}.merge(headers)
|
19
|
+
end
|
20
|
+
|
21
|
+
def get_uri
|
22
|
+
if @domain
|
23
|
+
uri = URI("http://#{domain}/")
|
24
|
+
else
|
25
|
+
if @bucket
|
26
|
+
uri = URI("http://#{bucket.name}.#{bucket.location}.#{host}")
|
27
|
+
else
|
28
|
+
uri = URI("http://oss.#{host}")
|
29
|
+
end
|
30
|
+
end
|
31
|
+
uri.path = @path
|
32
|
+
uri.query = @queries.to_query_string if @queries.count > 0
|
33
|
+
uri
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.add_operation(verb)
|
37
|
+
define_method(verb) do
|
38
|
+
uri = get_uri
|
39
|
+
|
40
|
+
request = Net::HTTP.send(:const_get, verb.to_s.capitalize).new(uri)
|
41
|
+
|
42
|
+
@headers.each_pair {|k,v| request[k] = v}
|
43
|
+
|
44
|
+
if @body
|
45
|
+
request.body = @body
|
46
|
+
digest = OpenSSL::Digest::MD5.digest(@body)
|
47
|
+
request['Content-MD5'] = Base64.encode64(digest).strip
|
48
|
+
request['Content-Length'] = @body.bytesize
|
49
|
+
end
|
50
|
+
|
51
|
+
request['Authorization'] = 'OSS ' + access_key_id + ':' +
|
52
|
+
signature(request)
|
53
|
+
|
54
|
+
logger.info(verb.to_s.upcase + ' ' + uri.to_s + ' ' + request.to_hash.to_s)
|
55
|
+
|
56
|
+
response = nil
|
57
|
+
Net::HTTP.start(uri.host, uri.port) do |http|
|
58
|
+
response = http.request(request)
|
59
|
+
logger.info(response.code.to_s + ' ' + response.message)
|
60
|
+
end
|
61
|
+
response
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
add_operation :get
|
66
|
+
add_operation :put
|
67
|
+
add_operation :delete
|
68
|
+
add_operation :head
|
69
|
+
add_operation :post
|
70
|
+
|
71
|
+
def url_for_sharing(expires_in)
|
72
|
+
uri = get_uri
|
73
|
+
request = Net::HTTP::Get.new(uri)
|
74
|
+
@headers.each_pair {|k,v| request[k] = v}
|
75
|
+
expires_at = (Time.now + expires_in).utc.to_i
|
76
|
+
request["Date"] = expires_at
|
77
|
+
uri.query = URI.encode_www_form({"OSSAccessKeyId" => access_key_id,
|
78
|
+
"Expires" => expires_at,
|
79
|
+
"Signature" => signature(request)})
|
80
|
+
uri.to_s
|
81
|
+
end
|
82
|
+
|
83
|
+
def [](key)
|
84
|
+
@headers[key]
|
85
|
+
end
|
86
|
+
|
87
|
+
def []=(key, value)
|
88
|
+
@headers[key] = value
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
def signature(req)
|
93
|
+
verb = req.class.to_s.gsub(/Net::HTTP::/, '').upcase
|
94
|
+
data = verb + "\n" + req["Content-MD5"] + "\n" +
|
95
|
+
req["Content-Type"] + "\n" + req["Date"] + "\n" +
|
96
|
+
canonicalized_oss_headers(req) +
|
97
|
+
canonicalized_resource()
|
98
|
+
|
99
|
+
digest = OpenSSL::Digest.new('sha1')
|
100
|
+
hmac = OpenSSL::HMAC.digest(digest, access_key_secret, data)
|
101
|
+
Base64.encode64(hmac).strip
|
102
|
+
end
|
103
|
+
|
104
|
+
# oss api 20140828.pdf - 4.2
|
105
|
+
# 1) 将所有以“x-oss-”为前缀的 HTTP 请求头的名字转换成小写字母。如 ’X-OSS-Meta-Name: TaoBao’
|
106
|
+
# 转换成 ’x-oss-meta-name: TaoBao’ 。
|
107
|
+
# 2) 将上一步得到的所有 HTTP 请求头按照字典序进行升序排列。
|
108
|
+
# 3) 如果有相同名字的请求头,则根据标准 RFC 2616, 4.2 章进行合并(两个值之间只用逗号分隔)。
|
109
|
+
# 如有两个名为’x-oss-meta-name’的请求头,对应的值分别为’TaoBao’和’Alipay’,则合并后
|
110
|
+
# 为: ’x-oss-meta-name:TaoBao,Alipay’ 。
|
111
|
+
# 4) 删除请求头和内容之间分隔符两端出现的任何空格。
|
112
|
+
# 如 ’x-oss-meta-name: TaoBao,Alipay’ 转换成: ’x-oss-meta-name:TaoBao,Alipay’ 。
|
113
|
+
# 5) 将所有的头和内容用 ’\n’ 分隔符分隔拼成最后的 CanonicalizedOSSHeader 。
|
114
|
+
def canonicalized_oss_headers(req)
|
115
|
+
hash = Hash.new
|
116
|
+
req.each_header do |header|
|
117
|
+
header = header.downcase
|
118
|
+
next unless header.start_with?('x-oss-')
|
119
|
+
if hash.has_key?(header)
|
120
|
+
hash[header] = hash[header] + "," + req[header].strip
|
121
|
+
else
|
122
|
+
hash[header] = req[header].strip
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
126
|
+
return "" if hash.count == 0
|
127
|
+
hash.keys.sort.map{|k| "#{k}:#{hash[k]}"}.join("\n") << "\n"
|
128
|
+
end
|
129
|
+
|
130
|
+
# oss api 20140828.pdf - 4.2
|
131
|
+
# 1) 将 CanonicalizedResource 置成空字符串( “” );
|
132
|
+
# 2) 放入要访问的 OSS 资源:“ /BucketName/ObjectName ”(无 ObjectName 则不填)
|
133
|
+
# 3) 如果请求的资源包括子资源 (sub-resource) ,那么将所有的子资源按照字典序,从小到大排列并
|
134
|
+
# 以 ’&’ 为分隔符生成子资源字符串。在 CanonicalizedResource 字符串尾添加“?”和子资源字
|
135
|
+
# 符串。此时的 CanonicalizedResource 例子如: /BucketName/ObjectName?acl &uploadId=UploadId
|
136
|
+
# 4) 如果用户请求在查询字符串 (query string) 中指定了要重写 (override) 返回请求的 header,那么将这
|
137
|
+
# 些查询字符串及其请求值按照字典序,从小到大排列,以 ’&’ 为分隔符,按参数的字典序添加到
|
138
|
+
# CanonicalizedResource 中。此时的 CanonicalizedResource 例子:
|
139
|
+
# /BucketName/ObjectName?acl&response-content-type=ContentType & uploadId =UploadId
|
140
|
+
def canonicalized_resource()
|
141
|
+
return @path unless @bucket
|
142
|
+
return "/#{@bucket.name}#{@path}" if @queries.count == 0
|
143
|
+
|
144
|
+
array = @queries.keys.sort.map do |k|
|
145
|
+
if @queries[k] then "#{k}=#{@queries[k]}" else "#{k}" end
|
146
|
+
end
|
147
|
+
|
148
|
+
"/#{@bucket.name}#{@path}?#{array.sort.join('&')}"
|
149
|
+
end
|
150
|
+
|
151
|
+
end
|
152
|
+
|
153
|
+
end
|
154
|
+
end
|
data/lib/aliyunoss/api.rb
CHANGED
@@ -9,7 +9,7 @@ module Aliyun
|
|
9
9
|
|
10
10
|
# List all buckets
|
11
11
|
def list_bucket(params = {})
|
12
|
-
Aliyun::Oss::OssRequest.new(nil, '/',
|
12
|
+
Aliyun::Oss::OssRequest.new(nil, '/', nil, {}, {}).get
|
13
13
|
end
|
14
14
|
alias :get_service :list_bucket
|
15
15
|
|
@@ -34,49 +34,49 @@ HERE
|
|
34
34
|
|
35
35
|
# Delete bucket logging
|
36
36
|
def delete_logging(bucket)
|
37
|
-
Aliyun::Oss::OssRequest.new(bucket, '/', 'logging'=>nil).delete
|
37
|
+
Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'logging'=>nil).delete
|
38
38
|
end
|
39
39
|
|
40
40
|
# Delete bucket website
|
41
41
|
def delete_website(bucket)
|
42
|
-
Aliyun::Oss::OssRequest.new(bucket, '/', 'website'=>nil).delete
|
42
|
+
Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'website'=>nil).delete
|
43
43
|
end
|
44
44
|
alias :disable_website :delete_website
|
45
45
|
|
46
46
|
# List objects in bucket
|
47
47
|
def list_object(bucket, queries = {})
|
48
|
-
Aliyun::Oss::OssRequest.new(bucket, '/', queries).get
|
48
|
+
Aliyun::Oss::OssRequest.new(bucket, '/', nil, queries).get
|
49
49
|
end
|
50
50
|
|
51
51
|
# Get bucket acl
|
52
52
|
def get_bucket_acl(bucket)
|
53
|
-
Aliyun::Oss::OssRequest.new(bucket, '/', 'acl'=>nil).get
|
53
|
+
Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'acl'=>nil).get
|
54
54
|
end
|
55
55
|
|
56
56
|
# Get bucket location
|
57
57
|
def get_bucket_location(bucket)
|
58
|
-
Aliyun::Oss::OssRequest.new(bucket, '/', 'location'=>nil).get
|
58
|
+
Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'location'=>nil).get
|
59
59
|
end
|
60
60
|
|
61
61
|
# Query bucket logging status
|
62
62
|
def get_bucket_logging(bucket)
|
63
|
-
Aliyun::Oss::OssRequest.new(bucket, '/', 'logging'=>nil).get
|
63
|
+
Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'logging'=>nil).get
|
64
64
|
end
|
65
65
|
|
66
66
|
# Query bucket website status
|
67
67
|
def get_bucket_website(bucket)
|
68
|
-
Aliyun::Oss::OssRequest.new(bucket, '/', 'website'=>nil).get
|
68
|
+
Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'website'=>nil).get
|
69
69
|
end
|
70
70
|
|
71
71
|
# Set bucket acl permission
|
72
72
|
def put_bucket_acl(bucket, permission)
|
73
|
-
Aliyun::Oss::OssRequest.new(bucket, '/', {}, 'x-oss-acl'=> permission).put
|
73
|
+
Aliyun::Oss::OssRequest.new(bucket, '/', nil, {}, 'x-oss-acl'=> permission).put
|
74
74
|
end
|
75
75
|
alias :set_bucket_acl :put_bucket_acl
|
76
76
|
|
77
77
|
# Enable or disable bucket logging
|
78
78
|
def enable_bucket_logging(bucket, bucket_name_for_logging, log_prefix)
|
79
|
-
request = Aliyun::Oss::OssRequest.new(bucket, '/', 'logging'=>nil)
|
79
|
+
request = Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'logging'=>nil)
|
80
80
|
request.body = <<HERE
|
81
81
|
<?xml version="1.0" encoding="UTF-8"?>
|
82
82
|
<BucketLoggingStatus>
|
@@ -91,7 +91,7 @@ HERE
|
|
91
91
|
end
|
92
92
|
|
93
93
|
def disable_bucket_logging(bucket)
|
94
|
-
request = Aliyun::Oss::OssRequest.new(bucket, '/', 'logging'=>nil)
|
94
|
+
request = Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'logging'=>nil)
|
95
95
|
request.body = <<HERE
|
96
96
|
<?xml version="1.0" encoding="UTF-8"?>
|
97
97
|
<BucketLoggingStatus>
|
@@ -103,7 +103,7 @@ HERE
|
|
103
103
|
|
104
104
|
# Set bucket website access
|
105
105
|
def put_bucket_website(bucket, index_page, error_page)
|
106
|
-
request = Aliyun::Oss::OssRequest.new(bucket, '/', 'website'=>nil)
|
106
|
+
request = Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'website'=>nil)
|
107
107
|
request.body = <<HERE
|
108
108
|
<?xml version="1.0" encoding="UTF-8"?>
|
109
109
|
<WebsiteConfiguration>
|
@@ -123,7 +123,7 @@ HERE
|
|
123
123
|
# Copy Object
|
124
124
|
def copy_object(source_bucket, source_path, target_bucket, target_path, headers = {})
|
125
125
|
headers = headers.merge({'x-oss-copy-source'=> "/" + source_bucket.name + source_path})
|
126
|
-
Aliyun::Oss::OssRequest.new(target_bucket, target_path, {}, headers).put
|
126
|
+
Aliyun::Oss::OssRequest.new(target_bucket, target_path, nil, {}, headers).put
|
127
127
|
end
|
128
128
|
|
129
129
|
# Delete Object
|
@@ -138,24 +138,24 @@ HERE
|
|
138
138
|
xml << "<Quiet>#{quiet_mode}</Quiet>"
|
139
139
|
objects.each {|o| xml << "<Object><Key>#{o}</Key></Object>"}
|
140
140
|
xml << '</Delete>'
|
141
|
-
request = Aliyun::Oss::OssRequest.new(bucket, '/', 'delete'=>nil)
|
141
|
+
request = Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'delete'=>nil)
|
142
142
|
request.body = xml
|
143
143
|
request.post
|
144
144
|
end
|
145
145
|
|
146
146
|
# Get Object
|
147
147
|
def get_object(bucket, path, headers = {})
|
148
|
-
Aliyun::Oss::OssRequest.new(bucket, path, {}, headers).get
|
148
|
+
Aliyun::Oss::OssRequest.new(bucket, path, nil, {}, headers).get
|
149
149
|
end
|
150
150
|
|
151
151
|
# Head Object
|
152
152
|
def head_object(bucket, path, headers = {})
|
153
|
-
Aliyun::Oss::OssRequest.new(bucket, path, {}, headers).head
|
153
|
+
Aliyun::Oss::OssRequest.new(bucket, path, nil, {}, headers).head
|
154
154
|
end
|
155
155
|
|
156
156
|
# Put Object
|
157
157
|
def put_object(bucket, path, data, headers = {})
|
158
|
-
request = Aliyun::Oss::OssRequest.new(bucket, path, {}, headers)
|
158
|
+
request = Aliyun::Oss::OssRequest.new(bucket, path, nil, {}, headers)
|
159
159
|
request.body = data
|
160
160
|
request.put
|
161
161
|
end
|
@@ -176,17 +176,17 @@ HERE
|
|
176
176
|
|
177
177
|
# Multipart Initiate
|
178
178
|
def multipart_upload_initiate(bucket, path)
|
179
|
-
Aliyun::Oss::OssRequest.new(bucket, path, 'uploads'=>nil).post
|
179
|
+
Aliyun::Oss::OssRequest.new(bucket, path, nil, 'uploads'=>nil).post
|
180
180
|
end
|
181
181
|
|
182
182
|
def multipart_upload_part(bucket, path, upload_id, data, part_number)
|
183
|
-
request = Aliyun::Oss::OssRequest.new(bucket, path, 'partNumber'=> part_number.to_s, 'uploadId'=> upload_id)
|
183
|
+
request = Aliyun::Oss::OssRequest.new(bucket, path, nil, 'partNumber'=> part_number.to_s, 'uploadId'=> upload_id)
|
184
184
|
request.body = data
|
185
185
|
request.put
|
186
186
|
end
|
187
187
|
|
188
188
|
def multipart_upload_from_copy(upload_id, source_bucket, source_path, target_bucket, target_path, part_number, part_size, range = nil)
|
189
|
-
request = Aliyun::Oss::OssRequest.new(target_bucket, target_path, 'partNumber'=> part_number.to_s, 'uploadId'=> upload_id)
|
189
|
+
request = Aliyun::Oss::OssRequest.new(target_bucket, target_path, nil, 'partNumber'=> part_number.to_s, 'uploadId'=> upload_id)
|
190
190
|
request['Content-Length'] = part_size
|
191
191
|
request['x-oss-copy-source'] = "/" + source_bucket.name + source_path
|
192
192
|
request['x-oss-copy-source-range'] = range if range
|
@@ -194,7 +194,7 @@ HERE
|
|
194
194
|
end
|
195
195
|
|
196
196
|
def multipart_upload_complete(bucket, path, upload_id, part_list)
|
197
|
-
request = Aliyun::Oss::OssRequest.new(bucket, path, 'uploadId'=> upload_id)
|
197
|
+
request = Aliyun::Oss::OssRequest.new(bucket, path, nil, 'uploadId'=> upload_id)
|
198
198
|
xml = '<?xml version="1.0" encoding="UTF-8"?>'
|
199
199
|
xml << '<CompleteMultipartUpload>'
|
200
200
|
part_list.each_pair {|k,v| xml << "<Part><PartNumber>#{k}</PartNumber><ETag>#{v}</ETag></Part>"}
|
@@ -204,15 +204,15 @@ HERE
|
|
204
204
|
end
|
205
205
|
|
206
206
|
def multipart_upload_abort(bucket, path, upload_id)
|
207
|
-
Aliyun::Oss::OssRequest.new(bucket, path, 'uploadId'=> upload_id).delete
|
207
|
+
Aliyun::Oss::OssRequest.new(bucket, path, nil, 'uploadId'=> upload_id).delete
|
208
208
|
end
|
209
209
|
|
210
210
|
def multipart_upload_finished_parts(bucket, path, upload_id)
|
211
|
-
Aliyun::Oss::OssRequest.new(bucket, path, 'uploadId'=> upload_id).get
|
211
|
+
Aliyun::Oss::OssRequest.new(bucket, path, nil, 'uploadId'=> upload_id).get
|
212
212
|
end
|
213
213
|
|
214
214
|
def multipart_upload_unfinished_task(bucket)
|
215
|
-
Aliyun::Oss::OssRequest.new(bucket, '/', 'uploads'=>nil).get
|
215
|
+
Aliyun::Oss::OssRequest.new(bucket, '/', nil, 'uploads'=>nil).get
|
216
216
|
end
|
217
217
|
|
218
218
|
end
|
data/lib/aliyunoss/bucket.rb
CHANGED
@@ -2,7 +2,7 @@ module Aliyun
|
|
2
2
|
module Oss
|
3
3
|
|
4
4
|
class Bucket
|
5
|
-
attr_accessor :location, :name, :creation_date
|
5
|
+
attr_accessor :location, :name, :creation_date, :domain, :extranet_endpoint, :intranet_endpoint
|
6
6
|
|
7
7
|
def initialize(params = {})
|
8
8
|
params.each_pair {|k,v| send("#{k.to_s}=", v) }
|
data/lib/aliyunoss/extension.rb
CHANGED
@@ -48,7 +48,7 @@ module Net
|
|
48
48
|
nodes = Nokogiri::XML(self.body).xpath('//Bucket') rescue []
|
49
49
|
nodes.map do |node|
|
50
50
|
bucket = Aliyun::Oss::Bucket.new
|
51
|
-
node.elements.each {|e| bucket.send("#{e.name.underscore}=".to_sym, e.content)}
|
51
|
+
node.elements.each {|e| bucket.send("#{e.name.underscore}=".to_sym, e.content) rescue nil }
|
52
52
|
bucket
|
53
53
|
end
|
54
54
|
end
|
@@ -8,20 +8,25 @@ module Aliyun
|
|
8
8
|
class OssRequest
|
9
9
|
|
10
10
|
include ConfigHelper
|
11
|
-
attr_accessor :bucket, :path, :body, :queris
|
11
|
+
attr_accessor :bucket, :path, :body, :queris, :domain
|
12
12
|
|
13
|
-
def initialize(bucket, path, queries = {}, headers = {})
|
13
|
+
def initialize(bucket, path, domain = nil, queries = {}, headers = {})
|
14
14
|
@bucket = bucket
|
15
15
|
@path = path
|
16
16
|
@queries = queries
|
17
|
+
@domain = domain
|
17
18
|
@headers = {"Content-Type" => "", "Content-MD5" => "", "Date" => Time.now.utc.strftime('%a, %d %b %Y %H:%M:%S GMT')}.merge(headers)
|
18
19
|
end
|
19
20
|
|
20
21
|
def get_uri
|
21
|
-
if @
|
22
|
-
uri = URI("http://#{
|
22
|
+
if @domain
|
23
|
+
uri = URI("http://#{domain}/")
|
23
24
|
else
|
24
|
-
|
25
|
+
if @bucket
|
26
|
+
uri = URI("http://#{bucket.name}.#{bucket.location}.#{host}")
|
27
|
+
else
|
28
|
+
uri = URI("http://oss.#{host}")
|
29
|
+
end
|
25
30
|
end
|
26
31
|
uri.path = @path
|
27
32
|
uri.query = @queries.to_query_string if @queries.count > 0
|
@@ -109,7 +114,7 @@ module Aliyun
|
|
109
114
|
def canonicalized_oss_headers(req)
|
110
115
|
hash = Hash.new
|
111
116
|
req.each_header do |header|
|
112
|
-
header = header.downcase
|
117
|
+
header = header.to_s.downcase
|
113
118
|
next unless header.start_with?('x-oss-')
|
114
119
|
if hash.has_key?(header)
|
115
120
|
hash[header] = hash[header] + "," + req[header].strip
|
data/lib/aliyunoss/version.rb
CHANGED
data/spec/aliyunoss/api_spec.rb
CHANGED
@@ -9,8 +9,9 @@ describe Aliyun::Oss::API do
|
|
9
9
|
bucket_name = "aliyunoss-gem-test-#{rand.to_s.delete('0.')}"
|
10
10
|
location = 'oss-cn-beijing'
|
11
11
|
response = Aliyun::Oss::API.put_bucket(bucket_name, location)
|
12
|
-
expect(response).to be_a(Net::HTTPOK)
|
13
12
|
|
13
|
+
expect(response).to be_a(Net::HTTPOK)
|
14
|
+
|
14
15
|
@api = Aliyun::Oss::API
|
15
16
|
@bucket = Aliyun::Oss::Bucket.new(name: bucket_name, location: location)
|
16
17
|
end
|
@@ -24,7 +24,7 @@ describe Aliyun::Oss::OssRequest do
|
|
24
24
|
path = '/ObjectName'
|
25
25
|
queries = {"acl"=>nil, "uploadId"=>"UploadId",
|
26
26
|
"response-content-type"=>"ContentType" }
|
27
|
-
result = Aliyun::Oss::OssRequest.new(bucket, path, queries).
|
27
|
+
result = Aliyun::Oss::OssRequest.new(bucket, path, nil, queries).
|
28
28
|
send(:canonicalized_resource)
|
29
29
|
expect(result).to eq("/BucketName/ObjectName?acl&response-content-type=ContentType&uploadId=UploadId")
|
30
30
|
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aliyunoss
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- yijiecc
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-04-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: nokogiri
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.6'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.6'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -66,6 +80,7 @@ files:
|
|
66
80
|
- Rakefile
|
67
81
|
- aliyunoss.gemspec
|
68
82
|
- lib/aliyunoss.rb
|
83
|
+
- lib/aliyunoss/#oss_request.rb#
|
69
84
|
- lib/aliyunoss/api.rb
|
70
85
|
- lib/aliyunoss/bucket.rb
|
71
86
|
- lib/aliyunoss/config.rb
|
@@ -105,7 +120,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
120
|
version: '0'
|
106
121
|
requirements: []
|
107
122
|
rubyforge_project:
|
108
|
-
rubygems_version: 2.
|
123
|
+
rubygems_version: 2.4.8
|
109
124
|
signing_key:
|
110
125
|
specification_version: 4
|
111
126
|
summary: A gem for accessing Aliyun Open Storage Service.
|