gpt4 book ai didi

ruby-on-rails - Aws::S3 未定义的方法 'with_prefix' on a::Resource

转载 作者:数据小太阳 更新时间:2023-10-29 08:31:39 24 4
gpt4 key购买 nike

那么,首先,我将向您介绍我要实现的目标。我在 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::Errors::NoSuchKey: The specified key does not exist.调用 copy_object 时。 copy_source 是一个文件夹,所以它不像普通对象那样工作,没关系。

于是,我环顾四周,发现我必须调用:

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 得到一个桶.通过以上,我得到 NoMethodError: undefined method 'with_prefix' for #<Aws::Resources::Collection:0x007fad587255a8> with 让我感到困惑,因为我阅读的所有内容似乎都指向该解决方案。

我使用的是 AWS SDK v2。不确定我是否正在查看 v1 解决方案?

我不知道 copy_from 是怎么来的工作,老实说......我真正想要的是copy_to这似乎不在文档中。

aws-sdk-core-ruby github

aws sdk docs

最佳答案

aws-sdk v2 中“bucket”类的“objects”方法返回 CollectionObjectSummary (参见:http://docs.aws.amazon.com/sdkforruby/api/Aws/S3/Bucket.html#objects-instance_method)。

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

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

关于ruby-on-rails - Aws::S3 未定义的方法 'with_prefix' on a::Resource,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27914557/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com