我在使用Amazon AWS SDK版本2调用.head_object时遇到问题。我正在使用Figaro工作,使用Figaro设置我的环境变量并将其命名为AWS SDK期望:AWS_ACCESS_KEY_ID等< / p>
这是我用来尝试调用head_object的代码:
direct_upload_url_data = %r{\/(?<path>uploads\/.+\/(?<filename>.+))\z}.match(direct_upload_url)
direct_upload_url_data_string = direct_upload_url_data.to_s
s3 = Aws::S3::Client.new
direct_upload_head = s3.head_object(
bucket: ENV['AWS_BUCKET'],
key: direct_upload_url_data_string
)
self.image_file_name = direct_upload_url_data[:filename]
self.image_file_size = direct_upload_head.content_length
self.image_content_type = direct_upload_head.content_type
self.image_updated_at = direct_upload_head.last_modified
正如您所看到的,我正在尝试访问特定文件的元数据。我已经检查了正则表达式,它似乎正在返回正确的键,就像“uploads / {uniqueID} /image.jpg”这个错误正在我试图调用head_object的行上。我得到的错误是
Seahorse::Client::NetworkingError (hostname "mybucketname.s3.s3-us-west-2.amazonaws.com" does not match the server certificate)
当我走到我的水桶时,那道路不是我看到的,我看到https://s3-us-west-2.amazonaws.com/mybucketname所以我不确定这是否是我收到错误的原因。在使用AWS SDK Version 1之前,我已连接到此存储桶,因此我知道我的访问权限和密钥正常工作。在此先感谢您的帮助。
答案 0 :(得分:0)
您的亚马逊水桶似乎有错误的地区名称。 尝试将“s3-us-west-2”改为“us-west-2”。
答案 1 :(得分:0)
我非常肯定你已经解决了这个问题但是对于未来的读者来说,正如tapatun所提到的,请确保你的地区名称不包含s3前缀,并且应该是:“us-west-2”。
但之后,请务必重新启动服务器,否则旧的配置可能仍会让您继续疯狂追逐!
祝你好运,祝大家编码!