我是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
感谢所有帮助。
答案 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,您可以尝试:
def get_url(key)
bucket = @s3_client.bucket(ENV['S3_BUCKET'])
obj = @s3_client.get_object(bucket: bucket, key: key)
obj.public_url
end