我对红宝石很新。我可以使用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
。使用上面的代码我想读取文件的内容。怎么做 ?请告诉我上面代码中的错误
答案 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)