2016-08-05 12 views
1

Ich bin sehr neu in Ruby. Ich bin in der Lage, mit Ruby eine Verbindung zu AWS S3 herzustellen. Ich benutze folgenden CodeWie verwendet man get_object in Ruby für AWS?

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 obigem Code s3 ist Client. "analyticspoc" ist Root-Bucket. Mein Pfad zur CSV-Datei lautet wie folgt All Buckets /analyticspoc/TMEventLogs/stable/DeviceWiFi/20160803/1.0/20160803063600-2f9aa901-2ce7-4932-aafd-f7286cdb9871.csv.

Ich habe oben Code versucht. Ich über Code Ich bekam Fehler Error getting objects: [Aws::S3::Errors::NoSuchKey] - The specified key does not exist. Mit dem obigen Code möchte ich den Inhalt einer Datei lesen. Wie geht das ? Bitte sagen Sie mir, was ist der Fehler in oben genannten Code

+0

Sind Sie die tatsächlichen Dateinamen nicht in der verwendeten fehlen ': Schlüssel' Option? Wenn Sie versuchen, diese Datei auf die Festplatte herunterzuladen und zu schreiben, geben die Dokumente an, dass die richtige Option "response_target" lautet. –

Antwort

0

Haben Sie die Antwort. Sie können list_objects verwenden für Dateinamen in Brocken (1000 zu einem Zeitpunkt) den Zugriff auf Array, in dem als get_object für den Zugriff auf den Inhalt einer einzelnen Datei

wie folgt
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) 
0

Soweit ich Ihnen sagen kann, übergeben Sie die Argumente falsch. Es soll ein einziges options Hash seiner nach den documentation for get_object:

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

Ich glaube, es wurde versucht, Ihre Hash als String-Schlüssel zu verwenden, das ist offensichtlich nicht zur Arbeit zu gehen.

Mit Ruby sind die geschweiften Klammern { } nur in Methodenaufrufen erforderlich, wenn zusätzliche Argumente folgen, die sich in einem anderen Hash befinden müssen oder nicht Hash in der Natur sind. Dies macht die Syntax in den meisten Fällen viel weniger hässlich, wenn Optionen absichtlich dauern und manchmal zuerst und zuletzt, weil sie das einzige Argument sind.

+0

Ich habe den von dir angegebenen Code ausprobiert aber immer noch den gleichen Fehler. Ich versuchte auch, indem ich Zielparameter durch response_target –

+0

ersetzte Ich bin nicht sicher, welche Ruby-Bibliothek du verwendest, das ist nur der Standard. Wenn Sie Fehler erhalten, führen Sie den Anruf falsch aus. Überprüfen Sie die Dokumentation. – tadman