Amazon S3:如何在 ruby aws sdk 中设置使用虚拟主机的请求

Amazon S3: how to set requests to use virtual host in ruby aws sdk

目前,我正在使用 aws-sdk ruby 向 S3 发送 GET 请求,如下所示:

#!/usr/bin/ruby
#
require 'aws-sdk'
s3 = Aws::S3::Resource.new(region: 'test',     endpoint:'http://10.0.23.45:8081')
my_bucket = s3.bucket('test.bucket-name')
my_bucket.objects.limit(50).each do |obj|
   puts "  #{obj.key} => #{obj.etag}"
end

但请求正试图访问此 url 端点(虚拟主机):

http://test.bucket-name.10.0.23.45:8081

我想改用路径样式寻址。这就是我希望请求 url 端点的样子:

http://10.0.23.45:8081/test.bucket-name/

知道如何设置路径样式寻址而不是虚拟主机地址吗?谢谢

您需要根据documentation将选项:virtual_host设置为true

所以在你的情况下,这样的事情应该有效:

s3.bucket('10.0.23.45:8081').object('test.bucket-name').public_url(virtual_host: true)
#=> "http://10.0.23.45:8081/test.bucket-name/"

我在查看 ruby aws-sdk Source Code

的源代码后找到了自己问题的答案
 Aws.config[:s3] = { force_path_style: true }

添加以上行强制使用路径样式寻址。