如何以编程方式从 Rails 中的 AWS S3 对象读取元数据?

How can I programmatically read metadata from an AWS S3 Object in Rails?

我的应用程序正在 AWS S3 上存储文件。检索文件时,其中一些文件缺少元数据字段。我想编写一项服务,让我检查文件以查看元数据字段是否存在并且在从 S3 检索后是否有效。我觉得它应该像 my_object.show_metadata 一样简单,但我无法找到解决方案。有一个 AWS::S3::Object#metadata 方法,但是当我尝试使用它时出现以下错误:

*** NoMethodError Exception: undefined method `set?' for # < Hash::0x007ffa547a9350>

感谢任何能帮助我找到我在这方面的盲点的见解或问题。

更新:问题已解决。做这个问题所要求的正确方法实际上是 AWS::S3::Object#metadata 方法。这种情况下的问题是在创建 S3 对象时必须明确设置权限。修复前:

Aws::S3::Object.new(
  region: 'us-east-1',
  access_key_id: ENV['AWS_ACCESS_KEY_ID'],
  secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],
  bucket_name: "foo",
  key: key
)

修复后:

Aws.config.update({
  credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], ENV['AWS_SECRET_ACCESS_KEY'])
})

Aws::S3::Object.new(
  region: 'us-east-1',
  bucket_name: "foo",
  key: key
)

调整我的代码后,我能够成功使用所有 AWS S3 方法,包括 #metadata

做这个问题所要求的正确方法实际上是 AWS::S3::Object#metadata 方法。这种情况下的问题是在创建 S3 对象时必须明确设置权限。修复前:

Aws::S3::Object.new(   
    region: 'us-east-1',   
    access_key_id: ENV['AWS_ACCESS_KEY_ID'],   
    secret_access_key: ENV['AWS_SECRET_ACCESS_KEY'],   
    bucket_name: "foo",   
    key: key 
)

修复后:

Aws.config.update({   
    credentials: Aws::Credentials.new(ENV['AWS_ACCESS_KEY_ID'], 
    ENV['AWS_SECRET_ACCESS_KEY']) 
}) 

Aws::S3::Object.new(   
    region: 'us-east-1',   
    bucket_name: "foo",  
    key: key 
)

调整我的代码后,我能够成功使用所有 AWS S3 方法,包括#metadata。