如何在ruby for AWS中使用get_object?

时间:2016-08-05 06:45:53

标签: ruby amazon-s3

我对红宝石很新。我可以使用ruby连接到AWS S3。我正在使用以下代码

    filePath = '/TMEventLogs/stable/DeviceWiFi/20160803/1.0/20160803063600-2f9aa901-2ce7-4932-aafd-f7286cdb9871.csv'

    s3.get_object({bucket: "analyticspoc", key:"TMEventLogs/stable/DeviceWiFi/20160803/1.0/"}, target:filePath ) do |chunk|
            puts "1"
    end

在上面的代码中,s3是客户端。 “analyticspoc”是root bucket。我的csv文件路径如下All Buckets /analyticspoc/TMEventLogs/stable/DeviceWiFi/20160803/1.0/20160803063600-2f9aa901-2ce7-4932-aafd-f7286cdb9871.csv

我试过上面的代码。我上面的代码我收到错误Error getting objects: [Aws::S3::Errors::NoSuchKey] - The specified key does not exist。使用上面的代码我想读取文件的内容。怎么做 ?请告诉我上面代码中的错误

2 个答案:

答案 0 :(得分:0)

据我所知,你错误地传递了参数。根据{{​​3}}:

,它应该是单个options哈希
s3.get_object(
   bucket: "analyticspoc",
   key: "TMEventLogs/stable/DeviceWiFi/20160803/1.0/",
   target: filePath
) do |chunk|
  puts "1"
end

我相信它试图将你的哈希用作字符串键,这显然不会起作用。

使用Ruby时,花括号{ }仅在方法调用中是必需的,如果其他参数需要在另一个哈希中,或者本质上是非哈希的。这使得语法在大多数情况下都不那么难看,其中选项是故意持续的,有时候是第一个也是最后一个,因为它是唯一的参数。

答案 1 :(得分:0)

得到了答案。您可以使用list_objects访问块中的文件名数组(每次1000个),其中get_object用于访问单个文件的内容,如下所示

BUCKET = "analyticspoc"
path = "TMEventLogs/stable/DeviceWiFi/20160803/1.0/"
s3.list_objects(bucket:BUCKET, prefix: path).each do |response|
  contents = response.contents
end


file_name = "TMEventLogs/stable/DeviceWiFi/20160803/1.0/012121212121"
response = s3.get_object(bucket: BUCKET, key: file_name)