我的应用程序正在AWS S3上存储文件。检索文件时,其中一些文件缺少元数据字段。我想编写一个服务,让我检查文件,看看元数据字段是否存在并且在从S3检索后是否有效。我觉得它应该像my_object.show_metadata
一样简单,但我无法追踪解决方案。有一个AWS::S3::Object#metadata
方法,但是当我尝试使用它时,我收到以下错误:
*** NoMethodError异常:未定义的方法`set?'对于#<散列:: 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
。
答案 0 :(得分:1)
执行此问题的正确方法实际上是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。