首页 > 解决方案 > 使用 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)

标签: rubyamazon-s3

解决方案


推荐阅读