2012-03-16 126 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底部有顯示你想要達到什麼樣的一個例子

相關問題