Ruby on rails Aws::S3未定义方法';前缀为';关于a::资源

Ruby on rails Aws::S3未定义方法';前缀为';关于a::资源,ruby-on-rails,ruby,amazon-web-services,amazon-s3,aws-sdk,Ruby On Rails,Ruby,Amazon Web Services,Amazon S3,Aws Sdk,所以,首先,我会告诉你我想要实现的目标。我在S3上主持了一组照片。它们是汽车照片,由VIN组织。在创建时,我并不总是有VIN,所以我做了一个假的。稍后,当使用正确的VIN更新时,我想更新S3上的文件夹名称。无法重命名S3中的内容,因此我必须使用新名称进行复制,并删除原始名称。呸!现在来看看我是如何失败的 creds = ::Aws::Credentials.new(Settings.aws.access_key_id, Settings.aws.secret_access_key) s3 = :

所以,首先,我会告诉你我想要实现的目标。我在S3上主持了一组照片。它们是汽车照片,由VIN组织。在创建时,我并不总是有VIN,所以我做了一个假的。稍后,当使用正确的VIN更新时,我想更新S3上的文件夹名称。无法重命名S3中的内容,因此我必须使用新名称进行复制,并删除原始名称。呸!现在来看看我是如何失败的

creds = ::Aws::Credentials.new(Settings.aws.access_key_id, Settings.aws.secret_access_key)
s3 = ::Aws::S3::Client.new(region: 'us-west-1', credentials: creds)
bucket = Settings.aws.bucket
s3.copy_object(bucket: bucket, copy_source: "#{bucket}/foo", key: 'bar')
s3.delete_object(bucket: bucket, key: "#{bucket}/foo")
这不管用<代码>Aws::S3::错误::NoSuchKey:指定的键不存在。调用copy\u对象时。复制源是一个文件夹,所以它不像普通对象那样工作

因此,我环顾四周,发现我必须打电话:

s3 = ::Aws::S3::Resource.new(region: 'us-west-1', credentials: creds)
bucket = bucket = s3.bucket(Settings.aws.bucket)
bucket.objects.with_prefix('foo/').each do |object|
  object.copy_from(copy_source: "#{bucket}/foo")
end
这不管用。。。请注意,我现在正在调用
::Resource
,因为我不知道如何从
::Client
获取存储桶。在上面,我为#

我使用

bucket.objects.find_all { |object| object.key.include?('foo/') }

对于aws sdk v2

aws sdk v2中“bucket”类的“objects”方法返回of(请参见:)

要查询带有前缀的对象列表,应使用:

bucket.objects({prefix: 'some_prefix'})

请提供解释。请使用问题的编辑链接添加其他信息,例如详细信息和/或代码示例。“回答后”按钮只能用于完整回答问题。这似乎仍然适用于aws sdk v3。(只需确保过滤掉第一个结果,即文件夹对象本身,可能对您没有用处)