2015-02-17 99 views
17

我有一段時間與aws-sdk文檔一起工作,我遵循的所有鏈接似乎都過時且無法使用。使用aws-sdk v2將圖像上傳到S3

我正在尋找一個將圖像文件上傳到Ruby中的S3存儲桶的直接實現示例。

  • 假設圖像路徑是screenshots/image.png
  • ,我希望把它上傳到桶my_bucket
  • AWS creds住在我的ENV

任何意見是非常讚賞。

+0

當我跟隨這些例子我得到如下錯誤:'''未定義的方法'寫'爲#(NoMethodError)''' – YoDK 2015-02-17 21:03:22

+0

我結束了使用這個答案(http://stackoverflow.com/questions/130948/ruby-convert-file-to-string)然後用'''object = bucket.object('image.png')'''''' object.put(body:contents)''' – YoDK 2015-02-17 21:13:55

+0

@EldadMor你鏈接到v1文檔。 v2文檔可以在這裏找到:http://docs.aws.amazon.com/sdkforruby/api/index.html – 2015-02-20 23:53:30

回答

33

這裏是你如何上傳從磁盤上的文件到指定的水桶和關鍵:

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

這是最簡單的方法。您應該用您希望在Amazon S3中存儲的密鑰替換「密鑰」。這會使用分段上傳API自動上傳大文件,並會重試失敗的部分。

如果你喜歡經常上傳使用PUT對象,你可以調用#put或使用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 

此外,對於V2 SDK的API參考文檔是在這裏:http://docs.aws.amazon.com/sdkforruby/api/index.html

+0

你是我的英雄!花了最後3-4個小時試圖使這項工作無濟於事。在aws-sdk的v1中這麼做很簡單,但v2似乎不必要的複雜。 – mmichael 2015-03-22 23:04:17

+0

@mmichael我很好奇v2上傳比v1更復雜嗎?語法非常相似,不是嗎? – 2015-03-23 03:50:52

+0

那麼,v1你不必處理客戶端或資源類,你可以運行's3 = AWS :: S3.new'然後's3.buckets ['bucket_name']。objects ['key' ] .write(文件:'/ path/to/file')'。我其實是錯誤的,V2版本並不複雜。我的意思是說v2文檔更令人困惑。新文檔中沒有任何內容會告訴你如何執行答案中的步驟。如果他們這樣做,那麼它就不像[v1中的說明](http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3.html)那樣清晰,它可以在一頁上向您顯示所需的一切。 – mmichael 2015-03-23 05:12:52

相關問題