Ruby AWS SDK循环通过存储桶对象来创建URL

时间:2018-05-19 23:12:52

标签: ruby aws-sdk

我是AWS的新手,我正在尝试遍历我的存储桶对象以生成用于读取对象的网址。我在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

感谢所有帮助。

1 个答案:

答案 0 :(得分:0)

我不知道您具有的具体用例,但您不需要URL来读取存储桶中的对象,因为AWS SDK会将存储桶中的文件映射到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