File: bucket.rb

package info (click to toggle)
ruby-aliyun-sdk 0.8.0-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 792 kB
  • sloc: ruby: 7,909; ansic: 204; makefile: 4
file content (144 lines) | stat: -rw-r--r-- 4,537 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
# -*- encoding: utf-8 -*-

$LOAD_PATH.unshift(File.expand_path("../../../../lib", __FILE__))
require 'yaml'
require 'aliyun/oss'

# 初始化OSS client
Aliyun::Common::Logging.set_log_level(Logger::DEBUG)
conf_file = '~/.oss.yml'
conf = YAML.load(File.read(File.expand_path(conf_file)))
client = Aliyun::OSS::Client.new(
  :endpoint => conf['endpoint'],
  :cname => conf['cname'],
  :access_key_id => conf['access_key_id'],
  :access_key_secret => conf['access_key_secret'])
bucket = client.get_bucket(conf['bucket'])

# 辅助打印函数
def demo(msg)
  puts "######### #{msg} ########"
  puts
  yield
  puts "-------------------------"
  puts
end

# 列出当前所有的bucket
demo "List all buckets" do
  buckets = client.list_buckets
  buckets.each{ |b| puts "Bucket: #{b.name}"}
end

# 创建bucket,如果同名的bucket已经存在,则创建会失败
demo "Create bucket" do
  begin
    bucket_name = 't-foo-bar'
    client.create_bucket(bucket_name, :location => 'oss-cn-hangzhou')
    puts "Create bucket success: #{bucket_name}"
  rescue => e
    puts "Create bucket failed: #{bucket_name}, #{e.message}"
  end
end

# 向bucket中添加5个空的object:
# foo/obj1, foo/bar/obj1, foo/bar/obj2, foo/xxx/obj1

demo "Put objects before list" do
  bucket.put_object('foo/obj1')
  bucket.put_object('foo/bar/obj1')
  bucket.put_object('foo/bar/obj2')
  bucket.put_object('foo/xxx/obj1')
  bucket.put_object('中国の')
end

# list bucket下所有objects
demo "List first 10 objects" do
  objects = bucket.list_objects

  objects.take(10).each do |o|
    puts "Object: #{o.key}, type: #{o.type}, size: #{o.size}"
  end
end

# list bucket下所有前缀为foo/bar/的object
demo "List first 10 objects with prefix 'foo/bar/'" do
  objects = bucket.list_objects(:prefix => 'foo/bar/')

  objects.take(10).each do |o|
    puts "Object: #{o.key}, type: #{o.type}, size: #{o.size}"
  end
end

# 获取object的common prefix,common prefix是指bucket下所有object(也可
# 以指定特定的前缀)的公共前缀,这在object数量巨多的时候很有用,例如有
# 如下的object:
#     /foo/bar/obj1
#     /foo/bar/obj2
#     ...
#     /foo/bar/obj9999999
#     /foo/xx/
# 指定foo/为prefix,/为delimiter,则返回的common prefix为
# /foo/bar/, /foo/xxx/
# 这可以表示/foo/目录下的子目录。如果没有common prefix,你可能要遍历所
# 有的object来找公共的前缀

demo "List first 10 objects/common prefixes" do
  objects = bucket.list_objects(:prefix => 'foo/', :delimiter => '/')

  objects.take(10).each do |o|
    if o.is_a?(Aliyun::OSS::Object)
      puts "Object: #{o.key}, type: #{o.type}, size: #{o.size}"
    else
      puts "Common prefix: #{o}"
    end
  end
end

# 获取/设置Bucket属性: ACL, Logging, Referer, Website, LifeCycle, CORS
demo "Get/Set bucket properties: ACL/Logging/Referer/Website/Lifecycle/CORS" do
  puts "Bucket acl before: #{bucket.acl}"
  bucket.acl = Aliyun::OSS::ACL::PUBLIC_READ
  puts "Bucket acl now: #{bucket.acl}"
  puts

  puts "Bucket logging before: #{bucket.logging.to_s}"
  bucket.logging = Aliyun::OSS::BucketLogging.new(
    :enable => true, :target_bucket => conf['bucket'], :target_prefix => 'foo/')
  puts "Bucket logging now: #{bucket.logging.to_s}"
  puts

  puts "Bucket referer before: #{bucket.referer.to_s}"
  bucket.referer = Aliyun::OSS::BucketReferer.new(
    :allow_empty => true, :whitelist => ['baidu.com', 'aliyun.com'])
  puts "Bucket referer now: #{bucket.referer.to_s}"
  puts

  puts "Bucket website before: #{bucket.website.to_s}"
  bucket.website = Aliyun::OSS::BucketWebsite.new(
    :enable => true, :index => 'default.html', :error => 'error.html')
  puts "Bucket website now: #{bucket.website.to_s}"
  puts

  puts "Bucket lifecycle before: #{bucket.lifecycle.map(&:to_s)}"
  bucket.lifecycle = [
    Aliyun::OSS::LifeCycleRule.new(
    :id => 'rule1', :enable => true, :prefix => 'foo/', :expiry => 1),
    Aliyun::OSS::LifeCycleRule.new(
      :id => 'rule2', :enable => false, :prefix => 'bar/', :expiry => Date.new(2016, 1, 1))
  ]
  puts "Bucket lifecycle now: #{bucket.lifecycle.map(&:to_s)}"
  puts

  puts "Bucket cors before: #{bucket.cors.map(&:to_s)}"
  bucket.cors = [
    Aliyun::OSS::CORSRule.new(
    :allowed_origins => ['aliyun.com', 'http://www.taobao.com'],
    :allowed_methods => ['PUT', 'POST', 'GET'],
    :allowed_headers => ['Authorization'],
    :expose_headers => ['x-oss-test'],
    :max_age_seconds => 100)
  ]
  puts "Bucket cors now: #{bucket.cors.map(&:to_s)}"
  puts
end