ruby - 如何将自定义存储桶 URL 与 aws-sdk 结合使用

标签 ruby amazon-s3 aws-sdk

假设我有一个 S3 存储桶:

media.coolstuff.com

我已为该域启用静态网站托管,这就是 AWS 为我提供的 URL:

media.coolstuff.com.s3-website-us-east-1.amazonaws.com

我已从我的子域到 AWS 域创建了 CNAME。在我的存储桶中,我放置了一个 index.html 并将其公开,并且访问 media.coolstuff.com 成功呈现了它,所以我知道重定向可以正常工作.

我正在尝试弄清楚如何使用 aws-sdk gem 通过存储桶中对象的子域返回 URL。

代码如下:

creds = Aws::Credentials.new(access_key, secret_access_key)
s3 = Aws::S3::Resource.new(
  credentials: creds,
  endpoint: 'http://media.coolstuff.com',
  region: 'us-east-1'
)
bucket = s3.bucket('media.coolstuff.com')
obj = bucket.object('index.html')

obj.public_url
=> "http://media.coolstuff.com.media.coolstuff.com/index.html"

如您所见,公共(public)网址的存储桶是重复的。我明白这是为什么:存储桶名称以端点为前缀。但在这里,不应该是这样。我不知道如何解决这个问题。

同样,尝试获取 etag 也会失败,因为它无法找出正确的 URL:

obj.etag
Seahorse::Client::NetworkingError: unable to connect to `media.coolstuff.com.media.coolstuff.com`; SocketError: getaddrinfo: nodename nor servname provided, or not known

最佳答案

根据documentation你可以这样做

object.public_url(virtual_host: true)

不要更改默认端点 - 这用于对 S3 的实际 api 调用

关于ruby - 如何将自定义存储桶 URL 与 aws-sdk 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33233869/

相关文章:

php - AWS SNS 发布的消息未推送到设备

php - 使用 PHP 的 CreateSignedURL 失败 AWS SSE-C

javascript - 如何简单初始化一个前十个整数的数组?

linux - 如何 scp 到 Amazon s3?

node.js - AWS s3 API 错误 : specified bucket does not exist

error-handling - AWS DynamoDbExceptions应该如何处理?

ruby - 为什么 Ruby 的散列方法会因运行而异?

ruby-on-rails - 修复 "ruby installation is missing psych"错误?

ruby-on-rails - 根据其他表获取记录

hadoop - 如何在特定日期之前使用配置单元添加分区?