fog-aliyun 0.3.7 → 0.3.12
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/.gitignore +2 -0
- data/README.md +61 -3
- data/fog-aliyun.gemspec +7 -3
- data/lib/fog/aliyun.rb +6 -9
- data/lib/fog/aliyun/models/storage/directories.rb +34 -13
- data/lib/fog/aliyun/models/storage/directory.rb +16 -7
- data/lib/fog/aliyun/models/storage/file.rb +26 -21
- data/lib/fog/aliyun/models/storage/files.rb +104 -77
- data/lib/fog/aliyun/requests/storage/copy_object.rb +3 -5
- data/lib/fog/aliyun/requests/storage/delete_bucket.rb +3 -5
- data/lib/fog/aliyun/requests/storage/delete_container.rb +3 -5
- data/lib/fog/aliyun/requests/storage/delete_object.rb +5 -10
- data/lib/fog/aliyun/requests/storage/get_bucket.rb +43 -32
- data/lib/fog/aliyun/requests/storage/get_container.rb +2 -2
- data/lib/fog/aliyun/requests/storage/get_containers.rb +8 -3
- data/lib/fog/aliyun/requests/storage/get_object.rb +12 -25
- data/lib/fog/aliyun/requests/storage/get_object_http_url.rb +2 -2
- data/lib/fog/aliyun/requests/storage/get_object_https_url.rb +2 -2
- data/lib/fog/aliyun/requests/storage/head_object.rb +3 -5
- data/lib/fog/aliyun/requests/storage/list_buckets.rb +2 -2
- data/lib/fog/aliyun/requests/storage/list_objects.rb +23 -25
- data/lib/fog/aliyun/requests/storage/put_bucket.rb +2 -2
- data/lib/fog/aliyun/requests/storage/put_container.rb +3 -5
- data/lib/fog/aliyun/requests/storage/put_object.rb +24 -42
- data/lib/fog/aliyun/storage.rb +24 -10
- data/lib/fog/aliyun/version.rb +1 -1
- data/lib/fog/bin/aliyun.rb +1 -1
- metadata +61 -4
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Fog
|
4
|
-
module
|
5
|
-
class
|
4
|
+
module Aliyun
|
5
|
+
class Storage
|
6
6
|
class Real
|
7
7
|
# Copy object
|
8
8
|
#
|
@@ -19,8 +19,6 @@ module Fog
|
|
19
19
|
source_bucket ||= bucket
|
20
20
|
target_bucket ||= bucket
|
21
21
|
headers = { 'x-oss-copy-source' => "/#{source_bucket}/#{source_object}" }
|
22
|
-
location = get_bucket_location(target_bucket)
|
23
|
-
endpoint = 'http://' + location + '.aliyuncs.com'
|
24
22
|
resource = target_bucket + '/' + target_object
|
25
23
|
request(expects: [200, 203],
|
26
24
|
headers: headers,
|
@@ -28,7 +26,7 @@ module Fog
|
|
28
26
|
path: target_object,
|
29
27
|
bucket: target_bucket,
|
30
28
|
resource: resource,
|
31
|
-
|
29
|
+
location: get_bucket_location(bucket))
|
32
30
|
end
|
33
31
|
end
|
34
32
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Fog
|
4
|
-
module
|
5
|
-
class
|
4
|
+
module Aliyun
|
5
|
+
class Storage
|
6
6
|
class Real
|
7
7
|
# Delete an existing bucket
|
8
8
|
#
|
@@ -10,15 +10,13 @@ module Fog
|
|
10
10
|
# * bucket<~String> - Name of bucket to delete
|
11
11
|
#
|
12
12
|
def delete_bucket(bucket)
|
13
|
-
location = get_bucket_location(bucket)
|
14
|
-
endpoint = 'http://' + location + '.aliyuncs.com'
|
15
13
|
resource = bucket + '/'
|
16
14
|
request(
|
17
15
|
expects: 204,
|
18
16
|
method: 'DELETE',
|
19
17
|
bucket: bucket,
|
20
18
|
resource: resource,
|
21
|
-
|
19
|
+
location: get_bucket_location(bucket)
|
22
20
|
)
|
23
21
|
end
|
24
22
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Fog
|
4
|
-
module
|
5
|
-
class
|
4
|
+
module Aliyun
|
5
|
+
class Storage
|
6
6
|
class Real
|
7
7
|
# Delete an existing container
|
8
8
|
#
|
@@ -13,8 +13,6 @@ module Fog
|
|
13
13
|
def delete_container(container, options = {})
|
14
14
|
bucket = options[:bucket]
|
15
15
|
bucket ||= @aliyun_oss_bucket
|
16
|
-
location = get_bucket_location(bucket)
|
17
|
-
endpoint = 'http://' + location + '.aliyuncs.com'
|
18
16
|
object = container + '/'
|
19
17
|
resource = bucket + '/' + object
|
20
18
|
|
@@ -24,7 +22,7 @@ module Fog
|
|
24
22
|
path: object,
|
25
23
|
bucket: bucket,
|
26
24
|
resource: resource,
|
27
|
-
|
25
|
+
location: get_bucket_location(bucket)
|
28
26
|
)
|
29
27
|
end
|
30
28
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Fog
|
4
|
-
module
|
5
|
-
class
|
4
|
+
module Aliyun
|
5
|
+
class Storage
|
6
6
|
class Real
|
7
7
|
# Delete an existing object
|
8
8
|
#
|
@@ -12,8 +12,6 @@ module Fog
|
|
12
12
|
def delete_object(object, options = {})
|
13
13
|
bucket = options[:bucket]
|
14
14
|
bucket ||= @aliyun_oss_bucket
|
15
|
-
location = get_bucket_location(bucket)
|
16
|
-
endpoint = 'http://' + location + '.aliyuncs.com'
|
17
15
|
resource = bucket + '/' + object
|
18
16
|
request(
|
19
17
|
expects: 204,
|
@@ -21,15 +19,11 @@ module Fog
|
|
21
19
|
path: object,
|
22
20
|
bucket: bucket,
|
23
21
|
resource: resource,
|
24
|
-
|
22
|
+
location: get_bucket_location(bucket)
|
25
23
|
)
|
26
24
|
end
|
27
25
|
|
28
26
|
def abort_multipart_upload(bucket, object, endpoint, uploadid)
|
29
|
-
if endpoint.nil?
|
30
|
-
location = get_bucket_location(bucket)
|
31
|
-
endpoint = 'http://' + location + '.aliyuncs.com'
|
32
|
-
end
|
33
27
|
path = object + '?uploadId=' + uploadid
|
34
28
|
resource = bucket + '/' + path
|
35
29
|
|
@@ -39,7 +33,8 @@ module Fog
|
|
39
33
|
path: path,
|
40
34
|
bucket: bucket,
|
41
35
|
resource: resource,
|
42
|
-
endpoint: endpoint
|
36
|
+
endpoint: endpoint,
|
37
|
+
location: get_bucket_location(bucket)
|
43
38
|
)
|
44
39
|
end
|
45
40
|
end
|
@@ -1,27 +1,43 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Fog
|
4
|
-
module
|
5
|
-
class
|
4
|
+
module Aliyun
|
5
|
+
class Storage
|
6
6
|
class Real
|
7
|
-
def get_bucket(bucket)
|
8
|
-
|
9
|
-
|
10
|
-
#
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
7
|
+
def get_bucket(bucket, options = {})
|
8
|
+
prefix = options['prefix']
|
9
|
+
marker = options['marker']
|
10
|
+
# Set the GetBucket max limitation to 1000
|
11
|
+
maxKeys = options['max-keys'] || 1000
|
12
|
+
maxKeys = [maxKeys, 1000].min
|
13
|
+
delimiter = options['delimiter']
|
14
|
+
path = ''
|
15
|
+
if prefix
|
16
|
+
path += '/?prefix=' + prefix
|
17
|
+
path += '&marker=' + marker if marker
|
18
|
+
path += '&max-keys=' + maxKeys.to_s if maxKeys
|
19
|
+
path += '&delimiter=' + delimiter if delimiter
|
20
|
+
|
21
|
+
elsif marker
|
22
|
+
path += '/?marker=' + marker
|
23
|
+
path += '&max-keys=' + maxKeys.to_s if maxKeys
|
24
|
+
path += '&delimiter=' + delimiter if delimiter
|
25
|
+
|
26
|
+
elsif maxKeys
|
27
|
+
path += '/?max-keys=' + maxKeys.to_s
|
28
|
+
path += '&delimiter=' + delimiter if delimiter
|
29
|
+
elsif delimiter
|
30
|
+
path += '/?delimiter=' + delimiter
|
16
31
|
end
|
17
|
-
|
32
|
+
|
18
33
|
resource = bucket + '/'
|
19
34
|
ret = request(
|
20
35
|
expects: [200, 203, 404],
|
21
36
|
method: 'GET',
|
22
37
|
bucket: bucket,
|
23
38
|
resource: resource,
|
24
|
-
|
39
|
+
location: get_bucket_location(bucket),
|
40
|
+
path: path
|
25
41
|
)
|
26
42
|
xml = ret.data[:body]
|
27
43
|
XmlSimple.xml_in(xml)
|
@@ -37,12 +53,17 @@ module Fog
|
|
37
53
|
bucket: bucket,
|
38
54
|
resource: resource
|
39
55
|
)
|
40
|
-
|
56
|
+
# If there is an error, it will return a Hash with error code, host id and others
|
57
|
+
# If can not get a valid location, will return one using region
|
58
|
+
location = XmlSimple.xml_in(ret.data[:body])
|
59
|
+
if location.class == Hash && location.key?('HostId')
|
60
|
+
value = location['HostId']
|
61
|
+
location = value[0].split('.')[1]
|
62
|
+
end
|
63
|
+
location ||= 'oss-' + @aliyun_region_id
|
41
64
|
end
|
42
65
|
|
43
66
|
def get_bucket_acl(bucket)
|
44
|
-
location = get_bucket_location(bucket)
|
45
|
-
endpoint = 'http://' + location + '.aliyuncs.com'
|
46
67
|
attribute = '?acl'
|
47
68
|
resource = bucket + '/' + attribute
|
48
69
|
ret = request(
|
@@ -51,14 +72,12 @@ module Fog
|
|
51
72
|
path: attribute,
|
52
73
|
bucket: bucket,
|
53
74
|
resource: resource,
|
54
|
-
|
75
|
+
location: get_bucket_location(bucket)
|
55
76
|
)
|
56
77
|
XmlSimple.xml_in(ret.data[:body])['AccessControlList'][0]['Grant'][0]
|
57
78
|
end
|
58
79
|
|
59
80
|
def get_bucket_CORSRules(bucket)
|
60
|
-
location = get_bucket_location(bucket)
|
61
|
-
endpoint = 'http://' + location + '.aliyuncs.com'
|
62
81
|
attribute = '?cors'
|
63
82
|
resource = bucket + '/' + attribute
|
64
83
|
ret = request(
|
@@ -67,14 +86,12 @@ module Fog
|
|
67
86
|
path: attribute,
|
68
87
|
bucket: bucket,
|
69
88
|
resource: resource,
|
70
|
-
|
89
|
+
location: get_bucket_location(bucket)
|
71
90
|
)
|
72
91
|
XmlSimple.xml_in(ret.data[:body])['CORSRule'][0] if ret.data[:status] != 404
|
73
92
|
end
|
74
93
|
|
75
94
|
def get_bucket_lifecycle(bucket)
|
76
|
-
location = get_bucket_location(bucket)
|
77
|
-
endpoint = 'http://' + location + '.aliyuncs.com'
|
78
95
|
attribute = '?lifecycle'
|
79
96
|
resource = bucket + '/' + attribute
|
80
97
|
ret = request(
|
@@ -83,14 +100,12 @@ module Fog
|
|
83
100
|
path: attribute,
|
84
101
|
bucket: bucket,
|
85
102
|
resource: resource,
|
86
|
-
|
103
|
+
location: get_bucket_location(bucket)
|
87
104
|
)
|
88
105
|
XmlSimple.xml_in(ret.data[:body])['Rule'][0] if ret.data[:status] != 404
|
89
106
|
end
|
90
107
|
|
91
108
|
def get_bucket_logging(bucket)
|
92
|
-
location = get_bucket_location(bucket)
|
93
|
-
endpoint = 'http://' + location + '.aliyuncs.com'
|
94
109
|
attribute = '?logging'
|
95
110
|
resource = bucket + '/' + attribute
|
96
111
|
ret = request(
|
@@ -99,14 +114,12 @@ module Fog
|
|
99
114
|
path: attribute,
|
100
115
|
bucket: bucket,
|
101
116
|
resource: resource,
|
102
|
-
|
117
|
+
location: get_bucket_location(bucket)
|
103
118
|
)
|
104
119
|
XmlSimple.xml_in(ret.data[:body])['LoggingEnabled'][0]['TargetPrefix']
|
105
120
|
end
|
106
121
|
|
107
122
|
def get_bucket_referer(bucket)
|
108
|
-
location = get_bucket_location(bucket)
|
109
|
-
endpoint = 'http://' + location + '.aliyuncs.com'
|
110
123
|
attribute = '?referer'
|
111
124
|
resource = bucket + '/' + attribute
|
112
125
|
ret = request(
|
@@ -115,14 +128,12 @@ module Fog
|
|
115
128
|
path: attribute,
|
116
129
|
bucket: bucket,
|
117
130
|
resource: resource,
|
118
|
-
|
131
|
+
location: get_bucket_location(bucket)
|
119
132
|
)
|
120
133
|
XmlSimple.xml_in(ret.data[:body])
|
121
134
|
end
|
122
135
|
|
123
136
|
def get_bucket_website(bucket)
|
124
|
-
location = get_bucket_location(bucket)
|
125
|
-
endpoint = 'http://' + location + '.aliyuncs.com'
|
126
137
|
attribute = '?website'
|
127
138
|
resource = bucket + '/' + attribute
|
128
139
|
ret = request(
|
@@ -131,7 +142,7 @@ module Fog
|
|
131
142
|
path: attribute,
|
132
143
|
bucket: bucket,
|
133
144
|
resource: resource,
|
134
|
-
|
145
|
+
location: get_bucket_location(bucket)
|
135
146
|
)
|
136
147
|
XmlSimple.xml_in(ret.data[:body]) if ret.data[:status] != 404
|
137
148
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Fog
|
4
|
-
module
|
5
|
-
class
|
4
|
+
module Aliyun
|
5
|
+
class Storage
|
6
6
|
class Real
|
7
7
|
# List existing storage containers
|
8
8
|
#
|
@@ -42,13 +42,18 @@ module Fog
|
|
42
42
|
path += '?delimiter=' + delimiter
|
43
43
|
end
|
44
44
|
|
45
|
-
|
45
|
+
endpoint = options[:endpoint]
|
46
|
+
if endpoint.nil?
|
47
|
+
location = get_bucket_location(bucket)
|
48
|
+
end
|
46
49
|
resource = bucket + '/'
|
47
50
|
ret = request(
|
48
51
|
expects: [200, 203, 400],
|
49
52
|
method: 'GET',
|
50
53
|
path: path,
|
51
54
|
resource: resource,
|
55
|
+
endpoint: endpoint,
|
56
|
+
location: location,
|
52
57
|
bucket: bucket
|
53
58
|
)
|
54
59
|
xml = ret.data[:body]
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Fog
|
4
|
-
module
|
5
|
-
class
|
4
|
+
module Aliyun
|
5
|
+
class Storage
|
6
6
|
class Real
|
7
7
|
# Get details for object
|
8
8
|
#
|
@@ -11,30 +11,17 @@ module Fog
|
|
11
11
|
#
|
12
12
|
def get_object(object, range = nil, options = {})
|
13
13
|
options = options.reject { |_key, value| value.nil? }
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
14
|
+
bucket_name = options[:bucket]
|
15
|
+
bucket_name ||= @aliyun_oss_bucket
|
16
|
+
# Using OSS ruby SDK to fix performance issue
|
17
|
+
bucket = @oss_client.get_bucket(bucket_name)
|
18
|
+
body = Array.new
|
19
|
+
obj = bucket.get_object(object) do |chunk|
|
20
|
+
body << chunk
|
20
21
|
end
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
method: 'GET',
|
25
|
-
path: object,
|
26
|
-
bucket: bucket,
|
27
|
-
resource: resource,
|
28
|
-
endpoint: endpoint
|
29
|
-
}
|
30
|
-
|
31
|
-
if range
|
32
|
-
rangeStr = 'bytes=' + range
|
33
|
-
para[:headers] = { 'Range' => rangeStr }
|
34
|
-
end
|
35
|
-
|
36
|
-
response = request(para)
|
37
|
-
response.data
|
22
|
+
response = {}
|
23
|
+
obj.instance_variables.each {|var| response[var.to_s.delete("@")] = obj.instance_variable_get(var) }
|
24
|
+
response.merge({:body => body.join('')})
|
38
25
|
end
|
39
26
|
end
|
40
27
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Fog
|
4
|
-
module
|
5
|
-
class
|
4
|
+
module Aliyun
|
5
|
+
class Storage
|
6
6
|
class Real
|
7
7
|
# Get headers for object
|
8
8
|
#
|
@@ -12,8 +12,6 @@ module Fog
|
|
12
12
|
def head_object(object, options = {})
|
13
13
|
bucket = options[:bucket]
|
14
14
|
bucket ||= @aliyun_oss_bucket
|
15
|
-
location = get_bucket_location(bucket)
|
16
|
-
endpoint = 'http://' + location + '.aliyuncs.com'
|
17
15
|
resource = bucket + '/' + object
|
18
16
|
ret = request(
|
19
17
|
expects: [200, 404],
|
@@ -21,7 +19,7 @@ module Fog
|
|
21
19
|
path: object,
|
22
20
|
bucket: bucket,
|
23
21
|
resource: resource,
|
24
|
-
|
22
|
+
location: get_bucket_location(bucket)
|
25
23
|
)
|
26
24
|
ret
|
27
25
|
end
|