2012-03-16 127 views
3

行,所以我尝试了两种方法均未能有没有办法使用ruby gem aws-s3从s3下载文件?

使用 aws-s3宝石

require 'aws/s3' 
S3ID = "MYACCESS" 
S3KEY = "MYKEY" 
include AWS::S3 
AWS::S3::Base.establish_connection!(
    :access_key_id  => S3ID, 
    :secret_access_key => S3KEY 
) 

bucket = AWS::S3::Bucket.find("test_bucket") 
=> #<AWS::S3::Bucket:0x007fea3e2898c8 @attributes={"xmlns"=>"http://s3.amazonaws.com/doc/2006-03-01/", "name"=>"test_bucket", "prefix"=>nil, "marker"=>nil, "max_keys"=>1000, "is_truncated"=>true}, @object_cache=[#<AWS::S3::S3Object:0x70322020960960 '/test_bucket/00000188110119_1000000731213/'>, #<AWS::S3::S3Object:0x70322020960660 '/test_bucket/00000188110119_1000000731213/10_08-52-08.mp3'>, #<AWS::S3::S3Object:0x703220209 

bucket.size 
=> 1000 

bucket.objects[0] 
=> #<AWS::S3::S3Object:0x70322028046080 '/test_bucket/00000188110119_1000000731213/'> 
bucket.objects[1] 
=> #<AWS::S3::S3Object:0x70322028046040 '/test_bucket/00000188110119_1000000731213/10_08-52-08.mp3'> 
bucket.objects[1].key 
=> "00000188110119_1000000731213/10_08-52-08.mp3" 

File.open("/Users/matt/local_copy.mp3", "w") do |f| 
    f.write(bucket.objects[1]) 
end 

UPDATE

bucket.objects[1] 
=> #<AWS::S3::S3Object:0x70322028046040 '/test_bucket/00000188110119_1000000731213/10_08-52-08.mp3'> 
bucket.objects[1].read 
NoMethodError: undefined method `read' for #<AWS::S3::S3Object:0x70322028046040> 
bucket.objects[1].class 
=> AWS::S3::S3Object 

正如你可以看到什么,我试图做的就是复制

第一种方法mp3从S3存储桶复制到本地计算机....任何想法如何做到这一点

+0

[使用发送\ _File到远程源(Ruby on Rails的)](可能重复http://stackoverflow.com/questions/1322030/using-send-file-to -a-remote-source-ruby-on-rails) – 2014-04-18 20:01:56

回答

7

参见: http://docs.amazonwebservices.com/AWSRubySDK/latest/AWS/S3/S3Object.html

基本上,你必须使用在S3对象readwrite方法。

所以:

File.open("/Users/matt/local_copy.mp3", "w") do |f| 
    f.write(bucket.objects[1].read) 
end 
+1

NoMethodError:未定义的方法'读取'为# Trace 2012-03-16 17:57:14

+0

我将用代码更新我的问题...已更新! – Trace 2012-03-16 17:58:27

+1

好吧,那是因为你使用的是非常古老的S3宝石,这颗宝石显然已经过时了。您应该使用来自Amazon的官方AWS SDK gem。 – 2012-03-16 18:00:57

0

如果你不是被迫使用gem'aws-s3',你可能想看看fog,它做的事情基本相同,只是对于后端(aws,rackspace,......)是不可知的,似乎更积极。在this page底部有显示你想要达到什么样的一个例子

相关问题