首页 > 解决方案 > 无法从版本化的 s3 存储桶中删除项目

问题描述

我正在尝试.jpg从 s3 存储桶中删除特定文件。我尝试了许多不同的方法,例如delete_object和其他几个堆栈溢出答案。它们都没有正常工作,并导致程序每次都以不同的退出代码崩溃。下面的代码不会使程序崩溃,但存储桶保持不变。有谁知道如何解决这一问题?

s3 = boto3.resource('s3')
s3.Object('my-bucket', 'label_file').delete()

当打印呼叫的响应时,这是打印到终端的消息。


{
  'ResponseMetadata': {
    'RequestId': 'FJEOSIJFIO2J31',
    'HostId': 'VEt+tpQ+DSAW5UTx/+kGgmE0JX43345lX2ULHMDSDrKye1PsTA3Eo=',
    'HTTPStatusCode': 314,
    'HTTPHeaders': {
      'x-amz-id-2': 'VEt+tpQo2DAS6z+m8o3215UTx/+kGgmE0JX2DSi3ULHMDrKyevPsTA3Eo=',
      'x-amz-request-id': 'T255WdZ732sVDWJF',
      'date': 'Wed, 07 Apr 2021 19:28:04 GMT',
      'x-amz-version-id': '4gi8EtDS27ZNy221tkziO',
      'x-amz-delete-marker': 'true',
      'server': 'AmazonS3'
    },
    'RetryAttempts': 0
  },
  'DeleteMarker': True,
  'VersionId': '4gioU7FD36t5hcX21IOtkziO'
}

标签: python-3.xamazon-web-servicesamazon-s3

解决方案


您也可以删除单个对象版本。

对象版本

import boto3
bucket_name = "mybucket"
objects_to_delete = ['label_file', 'label_file1']

bucket = boto3.resource('s3').Bucket(bucket_name)
versions = bucket.object_versions.all()
# if you wanna delete all of them removing the check will be enough
for version in versions:
    if version.object_key in objects_to_delete:
        version.delete()

如果您愿意,您也可以使用创建删除过滤器filter

object_summary_iterator = bucket.objects.filter(
    Delimiter='string',
    EncodingType='url',
    Marker='string',
    MaxKeys=123,
    Prefix='string',
    RequestPayer='requester',
    ExpectedBucketOwner='string'
)

这里还有另一个很好的例子Delete all versions of an object in S3 using python?


推荐阅读