ruby - 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
感谢所有帮助。
解决方案
我不知道您的具体用例,但您不需要 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,您可以尝试:
def get_url(key)
bucket = @s3_client.bucket(ENV['S3_BUCKET'])
obj = @s3_client.get_object(bucket: bucket, key: key)
obj.public_url
end
推荐阅读
- ruby-on-rails - 在 dockers 中安装 libmysqlclient-dev 和 npm
- azure - 无法使用变量缩放 Azure SQL 数据库
- git - 我可以将 git 存储库分成包含自己分支的“捆绑包”吗?
- loopback4 - 带有 loopback4 的单表继承
- scheme - 为什么本次迭代这里会产生空列表?
- node.js - 在 Mongoose/NodeJS 中按类型分组的子文档中的金额百分比
- gremlin - 提高删除 TinkerGraph 顶点的性能
- http - Golang 反向代理 | http:代理错误:拨打 tcp 10.0.0.0:443 连接:连接被拒绝
- sql - 是否有任何方法或公式来计算从 LEFT、RIGHT、INNER、OUTER、CROSS 生成的列数
- python - 我想将 tkinter 添加到此代码中,并且会这样做,但我不知道将 tkinter 变量放在哪里?,它们最终会在 while true