当前位置: 首页 > 文档资料 > Ceph 中文文档 >

Ruby AWS::SDK 样例 (aws-sdk gem ~>2)

优质
小牛编辑
141浏览
2023-12-01

设置

你可以用全局方法配置连接:

Aws.config.update(
        endpoint: 'https://objects.dreamhost.com.',
        access_key_id: 'my-access-key',
        secret_access_key: 'my-secret-key',
        force_path_style: true,
        region: 'us-east-1'
)

并把客户端对象实例化:

s3_client = Aws::S3::Client.new

列出用户的所有 bucket

下面的代码会列出你的 bucket 的列表。 这也会打印出每个bucket的 bucket 名和创建时间。

s3_client.list_buckets.buckets.each do |bucket|
        puts "#{bucket.name}\t#{bucket.creation_date}"
end

输出形式类似下面这样:

mahbuckat1   2011-04-21T18:05:39.000Z
mahbuckat2   2011-04-21T18:05:48.000Z
mahbuckat3   2011-04-21T18:07:18.000Z

新建一个 Bucket

下面的代码会新建一个名为 my-new-bucket 的bucket。

s3_client.create_bucket(bucket: 'my-new-bucket')

如果你想要新建一个私有bucket:

acl 选项接收的参数有: # private, public-read, public-read-write, authenticated-read

s3_client.create_bucket(bucket: 'my-new-bucket', acl: 'private')

列出 bucket 的内容

下面的代码会输出 bucket 内的所有对象列表。 这也会打印出每一个对象的名字、文件尺寸和最近修改时间。

s3_client.get_objects(bucket: 'my-new-bucket').contents.each do |object|
        puts "#{object.key}\t#{object.size}\t#{object.last-modified}"
end

如果 bucket 内有文件,输出形式类似下面这样:

myphoto1.jpg 251262  2011-08-08T21:35:48.000Z
myphoto2.j‰g 262518  2011-08-08T21:38:01.000Z

删除桶

Note

Bucket必须为空!否则它不会工作!

s3_client.delete_bucket(bucket: 'my-new-bucket')

强行删除非空 bucket

首先,你需要清空这个 bucket:

Aws::S3::Bucket.new('my-new-bucket', client: s3_client).clear!

然后删除这个 bucket

s3_client.delete_bucket(bucket: 'my-new-bucket')

新建一个对象

下面的代码会新建一个内容是字符串``”Hello World!”`` 的文件 hello.txt

s3_client.put_object(
        key: 'hello.txt',
        body: 'Hello World!',
        bucket: 'my-new-bucket',
        content_type: 'text/plain'
)

修改一个对象的 ACL

下面的代码会将对象 hello.txt 的权限变为公开可读,而将 secret_plans.txt 的权限设为私有。

s3_client.put_object_acl(bucket: 'my-new-bucket', key: 'hello.txt', acl: 'public-read')

s3_client.put_object_acl(bucket: 'my-new-bucket', key: 'private.txt', acl: 'private')

下载一个对象 (到文件)

下面的代码会下载对象 perl_poetry.pdf 并将它存到位置 C:\Users\larry\Documents

s3_client.get_object(bucket: 'my-new-bucket', key: 'poetry.pdf', response_target: '/home/larry/documents/poetry.pdf')

删除一个对象

下面的代码会删除对象 goodbye.txt

s3_client.delete_object(key: 'goodbye.txt', bucket: 'my-new-bucket')

生成对象的下载 URLs (带签名和不带签名)

下面的代码会为 hello.txt 生成一个无签名为下载URL。 这个操作是生效是因为前面我们已经设置 hello.txt 的 ACL 为公开可读。下面的代码同时会为 secret_plans.txt 生成一个有效时间是一个小时的带签名的下载 URL。带签名的下载 URL 在这个时间内是可用的,即使对象的权限是私有(当时间到期后 URL 将不可用)。

puts Aws::S3::Object.new(
        key: 'hello.txt',
        bucket_name: 'my-new-bucket',
        client: s3_client
).public_url

puts Aws::S3::Object.new(
        key: 'secret_plans.txt',
        bucket_name: 'hermes_ceph_gem',
        client: s3_client
).presigned_url(:get, expires_in: 60 * 60)

输出形式类似下面这样:

http://objects.dreamhost.com/my-bucket-name/hello.txt
http://objects.dreamhost.com/my-bucket-name/secret_plans.txt?Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX&Expires=1316027075&AWSAccessKeyId=XXXXXXXXXXXXXXXXXXX

Ruby AWS::S3 样例 (aws-s3 gem)

新建一个连接

下面的代码会新建一个连接,这样你就可以和服务器交互.

AWS::S3::Base.establish_connection!(
        :server            => 'objects.dreamhost.com',
        :use_ssl           => true,
        :access_key_id     => 'my-access-key',
        :secret_access_key => 'my-secret-key'
)

列出用户的所有 bucket

下面的代码会列出一个 AWS::S3::Bucket 对象类型的列表,这代 表你拥有的bucket。这也会打印出每个bucket的 bucket 名和创建时间。

AWS::S3::Service.buckets.each do |bucket|
        puts "#{bucket.name}\t#{bucket.creation_date}"
end

输出形式类似下面这样:

mahbuckat1   2011-04-21T18:05:39.000Z
mahbuckat2   2011-04-21T18:05:48.000Z
mahbuckat3   2011-04-21T18:07:18.000Z

新建一个 Bucket

下面的代码会新建一个名为 my-new-bucket 的bucket。

AWS::S3::Bucket.create('my-new-bucket')

列出 bucket 的内容

下面的代码会输出 bucket 内的所有对象列表。 这也会打印出每一个对象的名字、文件尺寸和最近修改时间。

new_bucket = AWS::S3::Bucket.find('my-new-bucket')
new_bucket.each do |object|
        puts "#{object.key}\t#{object.about['content-length']}\t#{object.about['last-modified']}"
end

如果 bucket 内有文件,输出形式类似下面这样:

myphoto1.jpg 251262  2011-08-08T21:35:48.000Z
myphoto2.jpg 262518  2011-08-08T21:38:01.000Z

删除 Bucket

Note

Bucket必须为空!否则它不会工作!

AWS::S3::Bucket.delete('my-new-bucket')

强制删除非空 Buckets

AWS::S3::Bucket.delete('my-new-bucket', :force => true)

新建一个对象

下面的代码会新建一个内容是字符串``”Hello World!”`` 的文件 hello.txt

AWS::S3::S3Object.store(
        'hello.txt',
        'Hello World!',
        'my-new-bucket',
        :content_type => 'text/plain'
)

修改一个对象的 ACL

下面的代码会将对象 hello.txt 的权限变为公开可读,而将 secret_plans.txt 的权限设为私有。

policy = AWS::S3::S3Object.acl('hello.txt', 'my-new-bucket')
policy.grants = [ AWS::S3::ACL::Grant.grant(:public_read) ]
AWS::S3::S3Object.acl('hello.txt', 'my-new-bucket', policy)

policy = AWS::S3::S3Object.acl('secret_plans.txt', 'my-new-bucket')
policy.grants = []
AWS::S3::S3Object.acl('secret_plans.txt', 'my-new-bucket', policy)

下载一个对象 (到文件)

下面的代码会下载对象 perl_poetry.pdf 并将它存到位置 C:\Users\larry\Documents

open('/home/larry/documents/poetry.pdf', 'w') do |file|
        AWS::S3::S3Object.stream('poetry.pdf', 'my-new-bucket') do |chunk|
                file.write(chunk)
        end
end

删除一个对象

下面的代码会删除对象 goodbye.txt

AWS::S3::S3Object.delete('goodbye.txt', 'my-new-bucket')

生成对象的下载 URLs (带签名和不带签名)

下面的代码会为 hello.txt 生成一个无签名为下载URL。 这个操作是生效是因为前面我们已经设置 hello.txt 的 ACL 为公开可读。下面的代码同时会为 secret_plans.txt 生成一个有效时间是一个小时的带签名的下载 URL。带签名的下载 URL 在这个时间内是可用的,即使对象的权限是私有(当时间到期后 URL 将不可用)。

puts AWS::S3::S3Object.url_for(
        'hello.txt',
        'my-new-bucket',
        :authenticated => false
)

puts AWS::S3::S3Object.url_for(
        'secret_plans.txt',
        'my-new-bucket',
        :expires_in => 60 * 60
)

输出形式类似下面这样:

http://objects.dreamhost.com/my-bucket-name/hello.txt
http://objects.dreamhost.com/my-bucket-name/secret_plans.txt?Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX&Expires=1316027075&AWSAccessKeyId=XXXXXXXXXXXXXXXXXXX