确认从 Heroku 中删除 S3 对象
Confirming delete of S3 object from Heroku
我正在通过以下操作从 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'
}
http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.delete_object
如何确认文件已被删除?
您得到的回复是正确的。 Boto3 文档是错误的。即使是针对 delete_objects()
的文档,仍有一个未解决的问题需要修复:
Boto3 delete_objects response does not match documented response
如果您想确定对象是否已被删除,请尝试:
'Contents' in s3.list_objects(Bucket=S3_BUCKET, Prefix=key)
应该 return True
如果对象存在,False
如果对象不存在。
另一种选择是调用 get_object_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.
我正在通过以下操作从 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'
}
http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Client.delete_object
如何确认文件已被删除?
您得到的回复是正确的。 Boto3 文档是错误的。即使是针对 delete_objects()
的文档,仍有一个未解决的问题需要修复:
Boto3 delete_objects response does not match documented response
如果您想确定对象是否已被删除,请尝试:
'Contents' in s3.list_objects(Bucket=S3_BUCKET, Prefix=key)
应该 return True
如果对象存在,False
如果对象不存在。
另一种选择是调用 get_object_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.