繁体   English   中英

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

[英]How I can rollback to previous version of deleted file on s3 via ruby 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

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

    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部分)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM