我在使用Amazon AWS SDK版本2调用.head_object时遇到了问题。我在一个Rails项目中工作,使用Figaro设置我的环境变量,并将它们命名为AWS SDK期望的名称: AWS_ACCESS_KEY_ID等。
下面是我用来调用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版本1之前,我已连接到此存储桶,因此我知道我的访问和密钥工作正常。提前感谢您的帮助。
发布于 2016-01-23 06:28:59
您的amazon存储桶似乎有一个错误的区域名称。尝试将"s3-us-west-2“更改为"us-west-2”。
发布于 2016-11-25 11:53:38
我非常确定你已经解决了这个问题,但是对于未来的读者来说,就像塔帕顿提到的那样,确保你的地区名称不包括s3前缀,应该是:"us-west-2“。
但是之后,一定要重新启动你的服务器,否则旧的配置可能仍然会让你徒劳无功!
祝大家好运,编码快乐!
https://stackoverflow.com/questions/28558794
复制相似问题