如何使用Ruby将文件内容从S3存储桶下载到内存中

问题描述 投票:1回答:1

我在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的内容?

ruby amazon-web-services amazon-s3 aws-sdk bucket
1个回答
4
投票

从AWS文档:

将对象下载到内存中

对于小对象,获取对象并将其在Ruby进程中可用可能很有用。如果你不为下载指定:target,则加载整个对象进入内存并放入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
 #=> '...'

在StringIO上调用#read#string以使主体作为String对象。

有关更多信息,请参见“ Downloading Objects from Amazon S3 using the AWS SDK for Ruby”。

© www.soinside.com 2019 - 2024. All rights reserved.