2015-02-17 9 views
17

Ich habe eine Menge Zeit mit der Dokumentation von aws-sdk zu arbeiten, alle Links, denen ich folge, scheinen veraltet und unbrauchbar zu sein.Hochladen eines Bildes nach S3 mit aws-sdk v2

Ich bin auf der Suche nach einer einfachen Implementierung Beispiel für das Hochladen einer Image-Datei in einen S3-Bucket in Ruby.

  • sagen wir mal der Bildpfad screenshots/image.png
  • ist und ich möchte es den Eimer my_bucket
  • AWS creds leben in meinem ENV

Jede Beratung laden sehr geschätzt.

+0

, wenn ich folgen diese Beispiele bekomme ich Fehler wie: '' '' undefinierte Methode 'schreiben 'für # (NoMethodError)' '' – YoDK

+0

Ich landete mit Diese Antwort (http://stackoverflow.com/questions/130948/ruby-convert-file-to-string) verwendet dann '' 'object = bucket.object ('image.png')' '' '' ' object.put (body: contents) '' ' – YoDK

+0

@EldadMor Sie sind mit der Dokumentation zu v1 verbunden. Die Dokumentation zu v2 finden Sie hier: http://docs.aws.amazon.com/sdkforruby/api/index.html –

Antwort

33

Hier ist, wie Sie eine Datei von der Festplatte auf den Namen Eimer hochladen und Schlüssel:

s3 = Aws::S3::Resource.new 
s3.bucket('my_bucket').object('key').upload_file('screenshots/image.png') 

Das ist die einfachste Methode. Sie sollten den "Schlüssel" durch den Schlüssel ersetzen, mit dem er in Amazon S3 gespeichert werden soll. Dadurch werden automatisch große Dateien für Sie hochgeladen, die die mehrteiligen Upload-APIs verwenden, und fehlerhafte Teile werden erneut versucht.

Wenn Sie immer laden bevorzugen PUT Objekt verwenden, können Sie #put aufrufen oder verwenden Aws::S3::Client:

# using put 
s3 = Aws::S3::Resource.new 
File.open('screenshots/image.png', 'rb') do |file| 
    s3.bucket('my_bucket').object('key').put(body:file) 
end 

# using a client 
s3 = Aws::S3::Client.new 
File.open('screenshots/image.png', 'rb') do |file| 
    s3.put_object(bucket:'my_bucket', key:'key', body:file) 
end 

Auch ist die API-Referenz-Dokumentation für die v2 SDK hier: http://docs.aws.amazon.com/sdkforruby/api/index.html

+0

Du bist mein verdammter Held! Habe die letzten 3-4 Stunden damit verbracht, diese Arbeit vergeblich zu machen. Dies in v1 der aws-sdk zu tun war so einfach, aber v2 scheint unnötig kompliziert. – mmichael

+0

@mmichael Ich bin gespannt wie V2-Uploads komplizierter sind als v1? Die Syntax ist sehr ähnlich, nein? –

+0

Nun, mit V1 musstest du nicht mit den Client- oder Resource-Klassen arbeiten, du könntest einfach 's3 = AWS :: S3.new' und dann' s3.buckets ['bucket_name']. Objects ['key' ] .write (Datei: '/ Pfad/zu/Datei') '. Ich habe tatsächlich falsch verstanden, die Version v2 ist nicht komplizierter. Ich wollte sagen, dass die v2-Dokumentation nur verwirrender ist. Nirgendwo in den neuen Dokumenten zeigt es Ihnen, wie Sie die Schritte in Ihrer Antwort ausführen. Und wenn, dann ist es nicht so klar wie die [Anweisungen in v1] (http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3.html), wo es dir alles zeigt, was du auf einer Seite brauchst . – mmichael

Verwandte Themen