我有一个工作桶,在s3上分配了一个子域,我想使用带有expire选项的对象的url_for方法为资源创建一个签名的URL。
在初始化程序中,我有:
AWS.config({
:access_key_id => Rails.application.secrets.aws_access_key_id,
:secret_access_key => Rails.application.secrets.aws_secret_access_key,
:s3_endpoint => "assets.mydomain.com"
})
当我跑步时
AWS::S3.new.buckets["assets.mydomain.com"].objects["image.jpg"].url_for(:get, { :expires => 20.hours.from_now }).to_s
我得到了
"https://assets.mydomain.com/assets.mydomain.com/image.jpg?WSAccessKeyId=xxx&Expires=xxx&Signature=xxx"
请注意两次存储桶网址。
我该怎么做才能正常工作?
PS:删除端点并使用普通的s3 url(http://s3-west-1.amazon...
)按预期工作,但我想使用我的自定义dns条目。
感谢。
答案 0 :(得分:0)
尝试使用选项force_path_style: false
来使用子域名样式。
AWS::S3.new.buckets["assets.mydomain.com"].objects["image.jpg"]
.url_for(:get, {:expires => 20.hours.from_now, force_path_style: false }).to_s
来自http://docs.aws.amazon.com/AWSRubySDK/latest/AWS/S3/S3Object.html#url_for-instance_method