如何将自定义存储桶 URL 与 aws-sdk 一起使用
How do I use a custom bucket URL with aws-sdk
假设我有一个 S3 存储桶:
media.coolstuff.com
我为域启用了静态网站托管,这就是 AWS 给我的 URL:
media.coolstuff.com.s3-website-us-east-1.amazonaws.com
我已经创建了从我的子域到 AWS 域的 CNAME。在我的存储桶中,我放了一个 index.html
并使它成为 public,访问 media.coolstuff.com
成功呈现它,所以我知道重定向工作正常。
我正在尝试弄清楚如何使用 aws-sdk
gem 到 return 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 url 复制了存储桶。我明白这是为什么:存储桶名称以端点为前缀。但在这里,它不应该是。我不知道如何解决这个问题。
同样,尝试获取 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 调用
假设我有一个 S3 存储桶:
media.coolstuff.com
我为域启用了静态网站托管,这就是 AWS 给我的 URL:
media.coolstuff.com.s3-website-us-east-1.amazonaws.com
我已经创建了从我的子域到 AWS 域的 CNAME。在我的存储桶中,我放了一个 index.html
并使它成为 public,访问 media.coolstuff.com
成功呈现它,所以我知道重定向工作正常。
我正在尝试弄清楚如何使用 aws-sdk
gem 到 return 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 url 复制了存储桶。我明白这是为什么:存储桶名称以端点为前缀。但在这里,它不应该是。我不知道如何解决这个问题。
同样,尝试获取 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 调用