【问题标题】:How to get objects from AWS S3 with incomplete key with Ruby app如何使用 Ruby 应用程序从具有不完整密钥的 AWS S3 获取对象
【发布时间】:2016-08-05 10:07:57
【问题描述】:

我正在尝试在 Ruby 应用程序中使用特定单词从 AWS S3 获取对象。有许多文件以“lesson_id_”作为密钥的一部分,我很想下载包括这个关键词的所有文件。但如果我用“lesson_id_*”搜索,它会显示 AWS::S3::Errors::NoSuchKey 没有这样的键。

我想有效地下载包括这个关键词的所有文件。请给我任何反馈如何使用“关键字”而不是完美的“关键”。

obj = S3_BUCKET.objects['lesson_id_*']

begin

File.open("name", 'wb') do |file|
obj.read do |chunk|
file.write(chunk)
end
end

rescue
end

【问题讨论】:

标签: ruby amazon-web-services amazon-s3


【解决方案1】:

你可以做这样的事情。获取所有对象并在下载之前检查它们。然后,您可以使用正则表达式或任何您喜欢的方法来检查

require 'aws-sdk'

s3 = Aws::S3::Resource.new(region: 'us-west-2')

bucket = s3.bucket('your-bucket')

bucket.objects.limit(1000).each do |item|
    if item.key.start_with?('lesson_id_') 
        obj = bucket.object(item.key)
        obj.get(response_target: item.key)
    end
end

【讨论】:

    【解决方案2】:

    您可以使用以下方法简单地获取完整密钥

    resp = api_client.list_objects({ bucket: <bucket-name>, prefix: 'your-prefix-'})
    

    然后使用.get_object 方法获取确切的文件。

    file_path = resp.contents[0].key
    s3_response = api_client.get_object({ bucket: <bucket-name>, key: file_path })
    

    【讨论】:

      猜你喜欢
      • 2017-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      • 2020-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多