【问题标题】:How do I use a custom bucket URL with aws-sdk如何将自定义存储桶 URL 与 aws-sdk 一起使用
【发布时间】:2017-04-04 12:55:00
【问题描述】:

假设我有一个 S3 存储桶:

media.coolstuff.com

我已经为域启用了静态网站托管,这就是 AWS 给我的 URL:

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

我已将 CNAME 从我的子域创建到 AWS 域。在我的存储桶中,我放了一个 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"

如您所见,公共 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

【问题讨论】:

    标签: ruby amazon-s3 aws-sdk


    【解决方案1】:

    根据documentation你可以这样做

    object.public_url(virtual_host: true)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-07-20
      • 2014-10-25
      • 2020-04-05
      • 1970-01-01
      • 1970-01-01
      • 2019-08-27
      • 2017-03-17
      • 2021-05-05
      相关资源
      最近更新 更多