适用于Ruby的AWS SDK提供了一些从Amazon S3获取对象的方法。本文重点介绍如何使用v2 Ruby SDK (the aws-sdk-core gem)从Amazon S3下载对象。
下载对象到内存
如果是小文件的话,可以获取对象,并用于Ruby进程中。如果你没有为下载指定“:target”,整个对象都会被加载到内存成为StringIO对象。
下载到文件或IO对象
s3 = Aws::S3::Client.new resp = s3.get_object(bucket:'bucket-name', key:'object-key') resp.body #=> #<StringIO ...> resp.body.read #=> '...'
从Amazon S3下载较大对象时,你通常会希望将对象直接下载到磁盘文件,因为这样可以避免加载整个对象到内存中。你可以为任何AWS操作指定:target作为IO对象。
File.open('filename', 'wb') do |file| reap = s3.get_object({ bucket:'bucket-name', key:'object-key' }, target: file) end
这种 #get_object的方法也能返回响应对象,但响应的#body会员是作为:target的文件对象,而不是StringIO对象。
你可以指定目标为字符串或路径名,Ruby SDK会为你创建该文件。
resp = s3.get_object({ bucket:'bucket-name', key:'object-key' }, target: '/path/to/file')
使用块
你还可以使用块下载对象。当块传递到#get_object,成块的数据就从套接口被读出来了。
File.open('filename', 'wb') do |file| s3.get_object(bucket: 'bucket-name', key:'object-key') do |chunk| file.write(chunk) end end
需要注意的是,使用块下载对象时,第一块数据产生后Ruby SDK将不会再重试失败请求。这样做可能会因为中途重新开始导致客户端文件损坏。出于这个原因,我建议使用上述方法中的一种指定目标文件路径或IO对象。
重试
Ruby SDK可默认重启失败请求3次。你也可以用:retry_limit修改默认值。这个值设置为0时禁用所有重试。
如果下载开始后Ruby SDK出现网络错误,它会尝试重试请求。首先它会检查IO目标是否响应#truncate;如果没有,SDK会禁用重试。
如果希望禁用此默认行为,你可以使用块模式或将S3客户端:retry_limit设置为0。
范围 GETs
下载非常大的对象时,可以考虑使用:range选项,分批下载该对象。目前Ruby SDK没有对此的辅助方法,但是如果你有兴趣提交一些建议,我们很乐意接受请求!
祝您下载愉快。
活动推荐: AWSome Day—让您大有作为(北京站)
活动推荐:5月26日 ImapBox在线培训——AWS 云计算环境中的机器学习
订阅“AWS中文技术社区”微信公众号,实时掌握AWS技术及产品消息!
AWS中文技术社区为广大开发者提供了一个Amazon Web Service技术交流平台,推送AWS最新资讯、技术视频、技术文档、精彩技术博文等相关精彩内容,更有AWS社区专家与您直接沟通交流!快加入AWS中文技术社区,更快更好的了解AWS云计算技术。
( 翻译/李贻丽 责编/王鑫贺 )
本网页所有文字内容由 imapbox邮箱云存储,邮箱网盘, iurlBox网页地址收藏管理器 下载并得到。
ImapBox 邮箱网盘 工具地址: https://www.imapbox.com/download/ImapBox.5.5.1_Build20141205_CHS_Bit32.exe
PC6下载站地址:PC6下载站分流下载
本网页所有视频内容由 imoviebox边看边下-网页视频下载, iurlBox网页地址收藏管理器 下载并得到。
ImovieBox 网页视频 工具地址: https://www.imapbox.com/download/ImovieBox4.7.0_Build20141115_CHS.exe
本文章由: imapbox邮箱云存储,邮箱网盘,ImageBox 图片批量下载器,网页图片批量下载专家,网页图片批量下载器,获取到文章图片,imoviebox网页视频批量下载器,下载视频内容,为您提供.
阅读和此文章类似的: 全球云计算