在篇文章中介绍过如何使用AWS SDK for Ruby版本2从Amazon S3下载对象。接下来介绍如何上传对象。
托管文件上传
最简单最常见的任务是将磁盘上的文件上传到Amazon S3的bucket。使用Amazon S3的资源接口时,这就变得非常简单了:
s3 = Aws::S3::Resource.new
s3.bucket('bucket-name').object('key').upload_file('/source/file/path')
你把附加选项转到资源构造函数和#upload_file上。该扩展示例演示了如何配置资源客户端,上传公共对象,然后生成可用于从浏览器下载对象的URL。
s3 = Aws::S3::Resource.new( credentials: Aws::Credentials.new('akid',
'secret'), region: 'us-west-1' ) obj = s3.bucket('bucket-name').object('key')
obj.upload_file('/source/file/path', acl:'public-read') obj.public_url
#=> "https://bucket-name.s3-us-west-1.amazonaws.com/key"
这是我推荐的SDK上传文件到bucket的方法。采用这种方法有下列优点:
•管理超过15MB对象的多部分上传。
•正确以二进制方式打开文件,避免编码问题。
•多线程并行上传大对象的各部分。
其他方法
除了 Aws::S3::Object#upload_file, 你也可以使用 #put 或者多部分上传APIs上传文件.
PUT 文件
小文件的话, 你可以使用 #put。#put方法接受可选主体, 既可以是一个字符串也可以是任何其他IO 对象。
1 obj = s3.bucket('bucket-name').object('key')
2
3 # from a string
4 obj.put(body:'Hello World!')
5
6 # from an IO object
7 File.open('/source/file', 'rb') do |file|
8 obj.put(body:file)
9 end
多部分 APIs
如果有可能,我建议你使用#upload_file。如果你需要管理大型对象的副本,那么你就需要使用多部分接口。这种方法对于最小文件有限制,你需要注意各部分的大小。而通常,这些都是留给先进用例的。
( 翻译/李贻丽 责编/王鑫贺 )