注意
本文档适用于 Ceph 的开发版本。
Ruby AWS::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 选项接受:# private, public-read, public-read-write, authenticated-read
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
删除存储桶
注意
存储桶必须为空!否则它将无法工作!
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 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')
下载对象(到文件)
这将下载对象 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 变为公开。然后,这会为 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
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'
)
列出拥有的存储桶
这将获取您拥有的 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
删除存储桶
注意
存储桶必须为空!否则它将无法工作!
AWS::S3::Bucket.delete('my-new-bucket')
强制删除非空存储桶
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)
下载对象(到文件)
这将下载对象 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 变为公开。然后,这会为 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