我如何通过ruby aws-sdk回滚到s3上以前版本的已删除文件

时间:2015-09-21 17:59:48

标签: ruby amazon-s3 aws-sdk

如何通过ruby aws-sdk回滚到s3上以前版本的已删除文件的任何示例?

看起来GEM aws-sdk-ruby没有在对象列表中显示已删除的文件

s3 = Aws::S3::Resource.new
bucket = s3.bucket('aws-sdk')
bucket.objects.each do |obj|
  if obj.key.start_with?("images/file_name.jpg")
    puts obj.to_yaml
  end
end

1 个答案:

答案 0 :(得分:0)

您可以像这样列出以前的版本:

    aws_versions = s3.client.list_object_versions(
      bucket: 'bucket_name',
      prefix: 'images/12345/50x50.jpg'
    ).versions

https://docs.aws.amazon.com/sdk-for-ruby/v2/api/Aws/S3/Client.html#list_object_versions-instance_method

下载这样的必要版本:

    cache = s3.client.get_object(
      bucket: 'bucket_name',
      key: 'images/12345/50x50.jpg',
      version_id: 'your_version_id',
      response_target: Rails.root.join('tmp/images/12345/50x50.jpg')
    )

https://docs.aws.amazon.com/sdk-for-ruby/v2/api/Aws/S3/Client.html#get_object-instance_method

最后,将其保存到您的模型中:

    model.attachment = Rails.root.join('tmp/images/12345/50x50.jpg').open
    model.save

PS:最好安装paper_trail,因此您可以在模型更改历史记录中找到以前的版本前缀(images/12345/50x50.jpg部分)。