这里的红宝石新手,
我在Amazon AWS S3中有一个存储桶,其中有一个名为users.csv
如何使用ruby将此文件的内容从S3存储桶加载到内存中?
我希望能够在将文件加载到内存后解析该文件的内容。
这是我的代码:
require 'aws-sdk'
s3 = Aws::S3::Resource.new(region: 'us-west-1')
resp = s3.list_objects(bucket: 'bucket-name', max_keys: 1)
resp.contents.each do |object|
puts #{object.value}
end
当我在IRB中尝试这个时,我得到:
struct Aws :: S3 :: Types :: Object key =“users.csv”,last_modified = 2017-11-15 19:10:28 UTC,etag =“\”9a3d50c07aa4aa6976037ce774294a26 \“”,size = 101, storage_class =“STANDARD”,owner = struct Aws :: S3 :: Types :: Owner display_name =“owner-name”,id =“42093cfa4ccb23a8156cdab8500a41a10bdbf90deebb0ee8a3b340dd1e0c3622”
如何解析users.csv中的内容?
答案 0 :(得分:4)
来自AWS文档:
将对象下载到内存中对于小对象,获取对象并在Ruby进程中使用它可能很有用。如果你 不指定:下载目标,加载整个对象 将内存转换为StringIO对象。
def import_from_s3
#initiate the client
s3 = Aws::S3::Client.new({
region: region,
access_key_id: key_id,
secret_access_key: secret
})
#Get the object
resp = s3.get_object(bucket: bucket, key: key)
resp.body
#=> #<StringIO ...>
resp.body.read
#=> '...'
Call #read or #string on the StringIO to get the body as a String
对象。