对象业务的批量删除接口
AWS S3提供了删除单个对象和批量删除对象的接口,如下:
-
DeleteObject
请求消息的格式,如下:DELETE /Key+?versionId=VersionId HTTP/1.1 Host: Bucket.s3.amazonaws.com x-amz-mfa: MFA x-amz-request-payer: RequestPayer x-amz-bypass-governance-retention: BypassGovernanceRetention x-amz-expected-bucket-owner: ExpectedBucketOwner
响应消息的格式,如下:
HTTP/1.1 204 x-amz-delete-marker: DeleteMarker x-amz-version-id: VersionId x-amz-request-charged: RequestCharged
-
DeleteObjects
本接口提供批量删除能力,要求客户提供对象名和版本号,不支持前缀。
请求消息的格式,如下:POST /?delete HTTP/1.1 Host: Bucket.s3.amazonaws.com x-amz-mfa: MFA x-amz-request-payer: RequestPayer x-amz-bypass-governance-retention: BypassGovernanceRetention x-amz-expected-bucket-owner: ExpectedBucketOwner x-amz-sdk-checksum-algorithm: ChecksumAlgorithm <?xml version="1.0" encoding="UTF-8"?> <Delete xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Object> <Key>string</Key> <VersionId>string</VersionId> </Object> ... <Quiet>boolean</Quiet> </Delete>
响应消息的格式,如下:
HTTP/1.1 200 x-amz-request-charged: RequestCharged <?xml version="1.0" encoding="UTF-8"?> <DeleteResult> <Deleted> <DeleteMarker>boolean</DeleteMarker> <DeleteMarkerVersionId>string</DeleteMarkerVersionId> <Key>string</Key> <VersionId>string</VersionId> </Deleted> ... <Error> <Code>string</Code> <Key>string</Key> <Message>string</Message> <VersionId>string</VersionId> </Error> ... </DeleteResult>
使用上述接口时,需要明确指定对象名,对象的版本号可选。
对于一些客户来说,现有的应用基于文件协议开发,依赖递归删除目录和文件的语义,依据前述接口对现有应用整改,工作量巨大,因此基于对象语义的规则,扩充现有的对象存储服务的接口,提供类似rm -rf /tmp/aa/
的能力,满足客户的诉求。
接口定义
参考ListObjectsV2,给出如下接口定义:
请求消息
POST /?delete&continuation-token=ContinuationToken&delimiter=Delimiter&encoding-type=EncodingType&fetch-owner=FetchOwner&max-keys=MaxKeys&prefix=Prefix&start-after=StartAfter HTTP/1.1
Host: Bucket.s3.amazonaws.com
响应消息
HTTP/1.1 200
x-amz-request-charged: RequestCharged
<?xml version="1.0" encoding="UTF-8"?>
<ListBucketResult>
<IsTruncated>boolean</IsTruncated>
<Contents>
<ETag>string</ETag>
<Key>string</Key>
<LastModified>timestamp</LastModified>
<Owner>
<DisplayName>string</DisplayName>
<ID>string</ID>
</Owner>
<Size>long</Size>
</Contents>
...
<Name>string</Name>
<Prefix>string</Prefix>
<Delimiter>string</Delimiter>
<MaxKeys>integer</MaxKeys>
<CommonPrefixes>
<Prefix>string</Prefix>
</CommonPrefixes>
...
<EncodingType>string</EncodingType>
<KeyCount>integer</KeyCount>
<ContinuationToken>string</ContinuationToken>
<NextContinuationToken>string</NextContinuationToken>
<StartAfter>string</StartAfter>
</ListBucketResult>
在响应消息中,使用isTruncated
字段来标识目录下是否仍然存在文件,取值为false
,表示目录下的文件已全部被删除。
技术限制
- 使用本接口批量删除对象,单次删除的对象数量的上限为1000。
- 本接口的定义中没有对象名和版本号,因此不能用于删除对象的历史版本。
本文来自博客园,作者:jackieathome,转载请注明原文链接:https://www.cnblogs.com/jackieathome/p/18319924