使用aws-sdk v2上传图像到S3

19

我在处理aws-sdk文档时遇到了很大的问题,我所跟随的所有链接看起来都过时且无用。

我正在寻找一个简单的实施示例,用Ruby将图像文件上传到S3存储桶中。

  • 假设图像路径为screenshots/image.png
  • 我想将其上传到桶my_bucket
  • AWS凭证存储在我的环境中

非常感谢任何建议。


当我按照这些示例操作时,我会遇到错误,例如:undefined method `write' for #<Aws::S3::Object bucket_name="my_bucket", key="image.png"> (NoMethodError) - YoDK
我最终使用了这个答案(https://dev59.com/UHVC5IYBdhLWcg3w-WSs),然后使用```object = bucket.object('image.png')object.put(body: contents)```。 - YoDK
@EldadMor,您链接到了v1文档。v2文档在这里:http://docs.aws.amazon.com/sdkforruby/api/index.html。 - Trevor Rowe
1个回答

38

以下是如何将磁盘上的文件上传到指定的存储桶(bucket)和键(key)的方法:

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

这是最简单的方法。您应该用Amazon S3中想要存储的键替换“key”。这将使用多部分上传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


你是我的超级英雄!花了最后的3-4个小时试图让这个工作,但无济于事。在aws-sdk的v1中做这件事是如此简单,但v2似乎不必要地复杂。 - vich
@mmichael,我很好奇v2上传方式比v1更复杂的地方在哪里?语法非常相似,不是吗? - Trevor Rowe
1
好的,使用v1版本时,您不必处理Client或Resource类,只需运行s3 = AWS::S3.new,然后s3.buckets['bucket_name'].objects['key'].write(file: '/path/to/file')即可。实际上,我说错了,v2版本并不更复杂。我的意思是v2文档更加混乱。新文档中没有任何地方向您展示如何执行您答案中的步骤。如果有的话,那么它不像v1中的说明那样清晰,其中在一个页面上显示了您需要的所有内容。 - vich
我同意,他们在v2文档中提高了知识水平,超过了初学者的水平。 - Conor
是的,文档真是一场噩梦。如果能更好地了解Client和Resource等常见用例的概述就太好了。 - Brent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接