Есть ли способ скачать файл с s3, используя ruby ​​gem aws-s3? - PullRequest
3 голосов
/ 16 марта 2012

Хорошо, поэтому я попробовал два метода, оба не удалось

Первый метод с использованием aws-s3 gem

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 и скопировать на локальный компьютер .... любые идеи о том, как это сделать

Ответы [ 2 ]

7 голосов
/ 16 марта 2012

См .: http://docs.amazonwebservices.com/AWSRubySDK/latest/AWS/S3/S3Object.html

В основном вы должны использовать методы read и write для объектов S3.

Итак:

File.open("/Users/matt/local_copy.mp3", "w") do |f|
  f.write(bucket.objects[1].read)
end
0 голосов
/ 16 марта 2012

Если вы не обязаны использовать гем 'aws-s3', вы можете проверить fog, который делает в основном те же вещи, но он не зависит от бэкенда (aws, rackspace, ..)и, кажется, более активным.Внизу этой страницы есть пример, показывающий, чего вы хотите достичь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...