Shailesh Jaiswal
Shailesh Jaiswal

Reputation: 3654

How to use get_object in ruby for AWS?

I am very new to ruby. I am able to connect to AWS S3 using ruby. I am using following code

    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

In above code s3 is client. "analyticspoc" is root bucket. My path to csv file is as follows All Buckets /analyticspoc/TMEventLogs/stable/DeviceWiFi/20160803/1.0/20160803063600-2f9aa901-2ce7-4932-aafd-f7286cdb9871.csv.

I have tried above code. I above code I was getting error Error getting objects: [Aws::S3::Errors::NoSuchKey] - The specified key does not exist. Using above code I want to read the contents of a file. How to do that ? Please tell me what is the mistake in above code

Upvotes: 5

Views: 5814

Answers (2)

Shailesh Jaiswal
Shailesh Jaiswal

Reputation: 3654

Got the answer. You can use list_objects for accessing array of file names in chunk(1000 at a time) where as get_object is used for accessing the content of a single file as follows

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)

Upvotes: 5

tadman
tadman

Reputation: 211540

As far as I can tell you're passing in the arguments incorrectly. It should be a single options hash according to the documentation for get_object:

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

I believe it was trying to use your hash as a string key which is obviously not going to work.

With Ruby the curly braces { } are only necessary in method calls if additional arguments follow that need to be in another hash or are non-hash in nature. This makes the syntax a lot less ugly in most cases where options are deliberately last, and sometimes first and last by virtue of being the only argument.

Upvotes: 1

Related Questions