2015-02-17 149 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