如何以编程方式从 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。
我的应用程序正在 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。