注意

本文档适用于 Ceph 开发版本。

RubyAWS::SDK示例 (aws-sdk gem ~>2)

设置

您可以全局设置连接:

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

列出拥有的存储桶

这会获取您拥有的存储桶列表。

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

创建存储桶

这会创建一个名为my-new-bucket

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

如果您想要一个私有存储桶:

acl选项接受:# 私有、公共读取、公共读写、认证读取

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

列出存储桶的内容

这会获取包含每个对象内容的哈希列表

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

如果存储桶中有一些文件,输出将类似于以下内容:

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

删除存储桶

Note

存储桶必须是空的!否则它将不起作用!

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

非空存储桶的强制删除

首先,您需要清空存储桶:

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

然后,您可以销毁存储桶

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

创建对象

这会创建一个文件hello.txt包含字符串"Hello World!"

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')

下载对象(到文件)

这会下载对象poetry.pdf并将其保存到/home/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')

生成对象下载 URL(签名和未签名的)

这会为hello.txt生成一个未签名的下载 URL。这之所以有效,是因为我们通过上述设置 ACL 使其公开。hello.txt public by setting the ACL above. This then generates a signed download URL for secret_plans.txt生成一个签名下载 URL,该 URL 将在 1 小时内有效。签名下载 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

RubyAWS::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'
)

列出拥有的存储桶

这会获取一个AWS::S3::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

创建存储桶

这会创建一个名为my-new-bucket

AWS::S3::Bucket.create('my-new-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

如果存储桶中有一些文件,输出将类似于以下内容:

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

删除存储桶

Note

存储桶必须是空的!否则它将不起作用!

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

非空存储桶的强制删除

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

创建对象

这会创建一个文件hello.txt包含字符串"Hello World!"

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)

下载对象(到文件)

这会下载对象poetry.pdf并将其保存到/home/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')

生成对象下载 URL(签名和未签名的)

这会为hello.txt生成一个未签名的下载 URL。这之所以有效,是因为我们通过上述设置 ACL 使其公开。hello.txt public by setting the ACL above. This then generates a signed download URL for secret_plans.txt生成一个签名下载 URL,该 URL 将在 1 小时内有效。签名下载 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

由 Ceph 基金会带给您

Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.