首页 > 解决方案 > Ruby AWS SDK 循环通过存储桶对象创建 url

问题描述

我是 AWS 的新手,我正在尝试遍历我的存储桶对象以生成 url 来读取对象。我在 AWS 文档中找到了以下参考:

bucket.objects.myobject.url_for(:read) 

我有以下方法,其中包含一个循环,该循环至少可以打印每个对象的密钥,但我正在努力让 url_for 工作。有任何想法吗?

  def aws_s3_url
    s3_client = Aws::S3::Resource.new(region: ENV['AWS_REGION'])
    bucket = s3_client.bucket(ENV['S3_BUCKET'])

    bucket.objects.each do |name|
      puts name.key
    end
  end

感谢所有帮助。

标签: rubyaws-sdk

解决方案


我不知道您的具体用例,但您不需要 URL 来读取存储桶中的对象,因为 AWS 开发工具包将存储桶中的文件映射到Object的实例。

要读取文件的内容,试试这个:

@s3_client = Aws::S3::Resource.new(region: ENV['AWS_REGION'])

def file_content(key)
  bucket = @s3_client.bucket(ENV['S3_BUCKET'])

  obj = @s3_client.get_object(bucket: bucket, key: key)
  obj.body.read
end

def get_all_files
  bucket = @s3_client.bucket(ENV['S3_BUCKET'])

  bucket.objects.each do |o|
    puts file_content(o.key)
  end
end

要返回对象的公共 URL,您可以尝试:

Aws::S3::Object.public_url

def get_url(key)
  bucket = @s3_client.bucket(ENV['S3_BUCKET'])

  obj = @s3_client.get_object(bucket: bucket, key: key)
  obj.public_url
end

推荐阅读