【问题标题】:AWS S3: Delete all versions of an object from versioned bucket in single callAWS S3:在单个调用中从版本化存储桶中删除对象的所有版本
【发布时间】:2020-07-03 21:33:08
【问题描述】:

我在 aws docs/几个网站/stackoverflow 上搜索了这个主题,但找不到任何答案。

我想在一次调用中删除版本化 s3 存储桶中对象的所有版本。

  • 我不想删除删除标记​​em>。
  • 我也不希望删除对象的单个版本。
  • 也不是,我想先查询一个对象的所有版本,然后发送DeleteObjectsAsync请求。

有没有办法在使用 S3 的 .net SDK 一次调用 AWS 时删除对象的所有版本,无论它是否具有删除标记?

【问题讨论】:

  • 您必须创建自定义函数,在其中迭代对象的版本并删除它们。
  • 这就是我要避免的。
  • 你无法避免。

标签: c# .net amazon-web-services amazon-s3


【解决方案1】:

我为我的一位客户做了同样的事情。我们使用 S3 存储单个文件的多个版本。在网上冲浪了很多之后,我找不到任何方法。 最好的方法是只循环 S3 文件版本。 有用的步骤:

  1. 获取要删除的对象的所有版本。
  2. 循环到这些版本并一一删除。

注意:我观察到 S3 的一个奇怪行为,在删除对象的所有版本后,我有时会发现正在创建删除标记。当然,如果你从 S3 控制台删除文件,你会得到一个删除标记。但就我而言,通过 NodeJs 来做,我发现只有几次。所以你需要在你的代码中处理它。这就是我在 NodeJS 中的做法

        if (data.Deleted.DeleteMarker) {
          console.log('Found delete marker', data.Deleted.DeleteMarker);
          //Handle here to delete the deleteMarker
          }

谢谢,如果有帮助,请点赞。

【讨论】:

    【解决方案2】:

    对此没有单一的要求。甚至 AWS 也为您提供了“遍历所有版本”示例作为解决方案:https://docs.aws.amazon.com/AmazonS3/latest/dev/delete-or-empty-bucket.html#delete-bucket-sdk-java

    【讨论】:

      猜你喜欢
      • 2015-06-30
      • 2015-05-24
      • 1970-01-01
      • 2020-06-14
      • 1970-01-01
      • 2020-12-21
      • 2022-12-05
      • 2018-03-30
      相关资源
      最近更新 更多