abortMultipartUpload method
This operation aborts a multipart upload. After a multipart upload is aborted, no additional parts can be uploaded using that upload ID. The storage consumed by any previously uploaded parts will be freed. However, if any part uploads are currently in progress, those part uploads might or might not succeed. As a result, it might be necessary to abort a given multipart upload multiple times in order to completely free all storage consumed by all parts.
To verify that all parts have been removed and prevent getting charged for the part storage, you should call the ListParts API operation and ensure that the parts list is empty.
-
Directory buckets - If multipart uploads in a directory bucket are
in progress, you can't delete the bucket until all the in-progress
multipart uploads are aborted or completed. To delete these in-progress
multipart uploads, use the
ListMultipartUploadsoperation to list the in-progress multipart uploads in the bucket and use theAbortMultipartUploadoperation to abort all the in-progress multipart uploads. -
Directory buckets - For directory buckets, you must make requests
for this API operation to the Zonal endpoint. These endpoints support
virtual-hosted-style requests in the format
https://amzn-s3-demo-bucket.s3express-zone-id.region-code.amazonaws.com/key-name. Path-style requests are not supported. For more information about endpoints in Availability Zones, see Regional and Zonal endpoints for directory buckets in Availability Zones in the Amazon S3 User Guide. For more information about endpoints in Local Zones, see Concepts for directory buckets in Local Zones in the Amazon S3 User Guide.
- Permissions
-
- General purpose bucket permissions - For information about permissions required to use the multipart upload, see Multipart Upload and Permissions in the Amazon S3 User Guide.
-
Directory bucket permissions - To grant access to this API
operation on a directory bucket, we recommend that you use the
CreateSessionAPI operation for session-based authorization. Specifically, you grant thes3express:CreateSessionpermission to the directory bucket in a bucket policy or an IAM identity-based policy. Then, you make theCreateSessionAPI call on the bucket to obtain a session token. With the session token in your request header, you can make API requests to this operation. After the session token expires, you make anotherCreateSessionAPI call to generate a new session token for use. Amazon Web Services CLI or SDKs create session and refresh the session token automatically to avoid service interruptions when a session expires. For more information about authorization, seeCreateSession.
- HTTP Host header syntax
-
Directory buckets - The HTTP Host header syntax is
Bucket-name.s3express-zone-id.region-code.amazonaws.com.
AbortMultipartUpload:
May throw NoSuchUpload.
Parameter bucket :
The bucket name to which the upload was taking place.
Directory buckets - When you use this operation with a directory
bucket, you must use virtual-hosted-style requests in the format
Bucket-name.s3express-zone-id.region-code.amazonaws.com.
Path-style requests are not supported. Directory bucket names must be
unique in the chosen Zone (Availability Zone or Local Zone). Bucket names
must follow the format
bucket-base-name--zone-id--x-s3 (for example,
amzn-s3-demo-bucket--usw2-az1--x-s3). For information
about bucket naming restrictions, see Directory
bucket naming rules in the Amazon S3 User Guide.
Access points - When you use this action with an access point for
general purpose buckets, you must provide the alias of the access point in
place of the bucket name or specify the access point ARN. When you use
this action with an access point for directory buckets, you must provide
the access point name in place of the bucket name. When using the access
point ARN, you must direct requests to the access point hostname. The
access point hostname takes the form
AccessPointName-AccountId.s3-accesspoint.Region.amazonaws.com.
When using this action with an access point through the Amazon Web
Services SDKs, you provide the access point ARN in place of the bucket
name. For more information about access point ARNs, see Using
access points in the Amazon S3 User Guide.
S3 on Outposts - When you use this action with S3 on Outposts, you
must direct requests to the S3 on Outposts hostname. The S3 on Outposts
hostname takes the form
AccessPointName-AccountId.outpostID.s3-outposts.Region.amazonaws.com.
When you use this action with S3 on Outposts, the destination bucket must
be the Outposts access point ARN or the access point alias. For more
information about S3 on Outposts, see What
is S3 on Outposts? in the Amazon S3 User Guide.
Parameter key :
Key of the object for which the multipart upload was initiated.
Parameter uploadId :
Upload ID that identifies the multipart upload.
Parameter expectedBucketOwner :
The account ID of the expected bucket owner. If the account ID that you
provide does not match the actual owner of the bucket, the request fails
with the HTTP status code 403 Forbidden (access denied).
Parameter ifMatchInitiatedTime :
If present, this header aborts an in progress multipart upload only if it
was initiated on the provided timestamp. If the initiated timestamp of the
multipart upload does not match the provided value, the operation returns
a 412 Precondition Failed error. If the initiated timestamp
matches or if the multipart upload doesn’t exist, the operation returns a
204 Success (No Content) response.
Implementation
Future<AbortMultipartUploadOutput> abortMultipartUpload({
required String bucket,
required String key,
required String uploadId,
String? expectedBucketOwner,
DateTime? ifMatchInitiatedTime,
RequestPayer? requestPayer,
}) async {
final headers = <String, String>{
if (expectedBucketOwner != null)
'x-amz-expected-bucket-owner': expectedBucketOwner.toString(),
if (ifMatchInitiatedTime != null)
'x-amz-if-match-initiated-time': _s.rfc822ToJson(ifMatchInitiatedTime),
if (requestPayer != null) 'x-amz-request-payer': requestPayer.value,
};
final $query = <String, List<String>>{
'uploadId': [uploadId],
};
final $result = await _protocol.sendRaw(
method: 'DELETE',
requestUri:
'/${Uri.encodeComponent(bucket)}/${key.split('/').map(Uri.encodeComponent).join('/')}?x-id=AbortMultipartUpload',
queryParams: $query,
headers: headers,
exceptionFnMap: _exceptionFns,
);
final $elem = await _s.xmlFromResponse($result);
return AbortMultipartUploadOutput(
requestCharged: _s
.extractHeaderStringValue($result.headers, 'x-amz-request-charged')
?.let(RequestCharged.fromString),
);
}