访问非标准s3存储桶

AJP*_*AJP 1 ruby amazon-s3

使用aws-s3gem,我可以用标准的s3桶成功执行交易,但是在爱尔兰制造的一个(s3-eu-west-1)给出了错误.The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint. 经过2个小时的搜索,这对我来说仍然没有任何意义,是否有办法绕过这个问题.

这个简单的教程适用于标准s3桶,但不适用于爱尔兰.

这个人的经历似乎表明这是不可能的.

AJP*_*AJP 6

好的,我刚刚在这里找到答案.

require 'aws/s3'
AWS::S3::Base.establish_connection!(
  :access_key_id     => ACCESS_KEY_ID,
  :secret_access_key => SECRET_ACCESS_KEY
)
AWS::S3::DEFAULT_HOST.replace('s3-eu-west-1.amazonaws.com')  # <= the crucial hacky line
AWS::S3::S3Object.store(
  file_name,
  temp_file,
  bucket,
  :content_type => mime_type
)
Run Code Online (Sandbox Code Playgroud)

编辑

更好的选择是使用aws-sdk其API似乎更好的gem,例如:

require 'aws-sdk'
s3 = AWS::S3.new(
    :access_key_id => ACCESS_KEY_ID,
    :secret_access_key => SECRET_ACCESS_KEY,
    :s3_endpoint => 's3-eu-west-1.amazonaws.com'
)
bucket = s3.buckets[bucket_name]
bucket.objects.create(
  file_name,
  temp_file,
  :content_type => mime_type
)
Run Code Online (Sandbox Code Playgroud)