我正在尝试上传一个文件。一个简单的helloidertxt。我是按照文档,我无法上传到我的桶。
# START AWS CLIENT
s3 = Aws::S3::Resource.new
bucket = s3.bucket(BUCKET_NAME)
begin
s3.buckets[BUCKET_NAME].objects[KEY].write(:file => FILE_NAME)
puts "Uploading file #{FILE_NAME} to bucket #{BUCKET_NAME}."
bucket.objects.each do |obj|
puts "#{obj.key} => #{obj.etag}"
end
rescue Aws::S3::Errors::ServiceError
# rescues all errors returned by Amazon Simple Storage Service
end
我在跟踪http://docs.aws.amazon.com/AmazonS3/latest/dev/UploadObjSingleOpRuby.html
错误:
rb/用户/. rvm/gems/ruby-2.1.1/gems/aws-sdk-resources-2.0.34/库/aws-sdk-resources/集合。rb:79:in '方法缺失:未定义"<main>
中的main.rb:18"的"<Aws::Resources::Collection:0x000001031e5100>
(NoMethodError)"的方法[]"
4条答案
按热度按时间rjee0c151#
主要问题是您安装了AWS SDK for Ruby的第2版,但您引用的是第1版的文档。第2版文档可在以下位置找到:
http://docs.aws.amazon.com/sdkforruby/api/index.html
要更新示例以使用版本2:
主要差异:
#objects()
和#object(key)
。后者是getter。前者枚举桶中的所有对象。#upload_file
方法来管理从磁盘上载对象,这与版本1中的#write
类似,但它也可以使用多个线程来并行上载大的对象部分。cwdobuhd2#
我使用了一个类似下面的脚本,如果它不存在,它将创建一个新的bucket,然后将所选的文件上传到它。
如果你保存到upload.rb你可以上传simple.txt到my_bucket运行
$ ruby upload.rb my_bucket simple.txt
bxjv4tth3#
zhte4eai4#
简短回答:您应该添加一个方法来检查存储桶是否已经存在。通过这样做,您将遵循最佳实践,并将失败的风险降到最低。
代码如下所示: