Amazon s3 确认从Heroku删除S3对象

Amazon s3 确认从Heroku删除S3对象,amazon-s3,boto3,Amazon S3,Boto3,我正在从Heroku的S3存储桶中删除一个对象,方法是: S3_BUCKET = os.environ.get('S3_BUCKET') key = str(form.trackID.data) + '.m4a' s3 = boto3.client('s3') response = s3.delete_object(Bucket=S3_BUCKET, Key=key) print(response) 因此,看起来文件被删除了,但我得到的响应不是我所期望的: {'ResponseMetadata

我正在从Heroku的S3存储桶中删除一个对象,方法是:

S3_BUCKET = os.environ.get('S3_BUCKET')
key = str(form.trackID.data) + '.m4a'
s3 = boto3.client('s3')
response = s3.delete_object(Bucket=S3_BUCKET, Key=key)
print(response)
因此,看起来文件被删除了,但我得到的响应不是我所期望的:

{'ResponseMetadata': {'HostId': 'kxEnqrRWgfIdeqdUaGQB5ZS75MrMO+hfw/pZPcUxwzLnaRYwqQ7ORyf34S/dsWnRvyVnPuBabPM=', 'HTTPStatusCode': 204, 'RetryAttempts': 0, 'HTTPHeaders': {'server': 'AmazonS3', 'date': 'Fri, 21 Oct 2016 01:54:09 GMT', 'x-amz-request-id': 'E2030C4C2CC59C65', 'x-amz-id-2': 'kxEnqrRWgfIdeqdUaGQB5ZS75MrMO+hfw/pZPcUxwzLnaRYwqQ7ORyf34S/dsWnRvyVnPuBabPM='}, 'RequestId': 'E2030C4C2CC59C65'}}
但是文档中说我应该期待一本如下所示的词典:

{
    'DeleteMarker': True|False,
    'VersionId': 'string',
    'RequestCharged': 'requester'
}


如何确认文件已被删除?

您得到的响应是正确的。文件是错误的。即使是针对
delete\u objects()
,仍有一个悬而未决的问题需要解决:

如果要确保对象已被删除,请尝试:

'Contents' in s3.list_objects(Bucket=S3_BUCKET, Prefix=key)
如果对象存在,则应返回
True
;如果对象不存在,则应返回
False

s3.get_object_acl(Bucket=S3_BUCKET, Key=key)

botocore.exceptions.ClientError: An error occurred (NoSuchKey) when calling the GetObjectAcl operation: The specified key does not exist.
另一个选项是调用
get\u object\u acl()
,并期望在对象不存在时引发异常

s3.get_object_acl(Bucket=S3_BUCKET, Key=key)

botocore.exceptions.ClientError: An error occurred (NoSuchKey) when calling the GetObjectAcl operation: The specified key does not exist.

我正在执行
response=s3.list_对象(Bucket=s3\u Bucket,Prefix=key)
然后执行
if response.get('IsTruncated')==False:
以确保文件在s3上不存在。然后在
if
语句下,我从数据库中删除文件信息。这看起来对吗?我不确定检查
IsTruncated
是否正确。