ruby - 使用 Ruby 更新 S3 对象的元数据
问题描述
我是 ruby 和 AWS 的新手。我试图通过附加时间戳来更新 S3 对象的元数据。我的文件名有格式xy_apple.zip xy_mango.zip
我打算在变量中传递水果名称fruit
并且所有文件的元数据都有 Key: x-amz-meta-time_stamp value : 1583273888
我正在尝试使用Key: x-amz-meta-20200309211255 value : 500
. 在这里,我将更新密钥以使当前时间戳结束,并且该值始终为 500
def deploy fruit
file_name = "xy_" + fruit + ".zip"
bucket_name = my_s3_bucket
s3 = get_aws_client(:s3, {region: 'us-east-1'})
bucket = s3.bucket('my_s3_bucket')
if bucket.object(file).exists?
update_metadata bucket_name, file_name
else
puts "File '/#{bucket_name}/#{file_name}' is not in S3 bucket!"
end
end
def update_metadata bucket_name, file_name
s3_client = get_aws_client(:s3, {region: 'us-east-1'})
option_base = {
bucket: bucket_name,
key: file_name
acl: "public-read",
}
object = s3_client.get_object(option_base)
new_metadata = object.metadata.merge(new_metadata + Time.new.strftime('%Y%m%d%H%M%S'))
metadata_value = "500"
if metadata.key?('time_stamp')
object.copy_to(object,
bucket: bucket_name,
acl: "public-read",
metadata: {
new_metadata => metadata_value,
},
metadata_directive: "REPLACE"
)
end
end
错误:
.rbenv/versions/2.5.3/lib/ruby/gems/2.5.0/gems/aws-sdk-core-3.90.1/lib/aws-sdk-core/param_validator.rb:33:in `validate!': unexpected value at params[:acl] (ArgumentError)
解决方案
推荐阅读
- c++ - 有人可以举一个使用多个功能的例子吗?
- express - 对 FE 和 BE 上的相同路由使用 createProxyMiddleware,同时避免 CORS
- azure-language-understanding - 关于改进 LUIS 语音识别的具体问题
- javascript - 使用搜索而不是数据列表创建下拉列表的正确方法是什么?
- cordova - 如何在 ionic 或任何混合应用程序中实现视频和音频聊天?
- fortran - 使用 OpenMP 并行化包含指针数组的可分配类型的英特尔 Fortran 代码
- docker - 在 docker 容器中以 root 身份被拒绝权限
- javascript - Discord bot,如何获得所有连接的“公会/服务器”
- php - 重启PHP-FPM时出现403错误如何解决?
- javascript - 对循环感到困惑 - 欢迎任何帮助