Skip to main content
A multipart upload (MPU) is an S3-compatible operation that uploads a large object in independent parts. If the client crashes, loses its connection, or otherwise stops before calling CompleteMultipartUpload or AbortMultipartUpload, the uploaded parts remain in the bucket as an incomplete multipart upload. Incomplete multipart uploads consume storage, do not appear in normal object listings, and prevent the bucket from being deleted. Use this page when you need to:
  • Free storage occupied by abandoned upload parts.
  • Unblock a DeleteBucket call that fails with BucketNotEmpty.
  • Reset upload state for a client that is stuck or misbehaving.
To prevent incomplete multipart uploads from accumulating in the first place, configure an AbortIncompleteMultipartUpload lifecycle rule. The procedures on this page handle uploads that already exist; the lifecycle rule prevents them from coming back.

Prerequisites

Before you start, make sure you have:

List incomplete multipart uploads

List the incomplete multipart uploads in a bucket. Each upload has a unique UploadId and is identified by the object key it was targeting.
Replace [BUCKET-NAME] with the name of your bucket.
List incomplete multipart uploads with AWS CLI
aws s3api list-multipart-uploads --bucket [BUCKET-NAME]
The response includes an Uploads array. Each entry has a Key (the object key the upload targets), an UploadId, and an Initiated timestamp.
Example output
{
    "Uploads": [
        {
            "Key": "datasets/large-archive.tar",
            "UploadId": "2~JZ8QkN9R-EXAMPLE-UPLOAD-ID",
            "Initiated": "2026-04-15T20:14:03.000Z"
        }
    ]
}
If the bucket has no incomplete multipart uploads, the response is empty.
A single call returns up to 1000 uploads. To enumerate every incomplete upload in a bucket, paginate using KeyMarker and UploadIdMarker from the response (or use the Boto3 paginator shown above).

Abort a specific multipart upload

Abort one incomplete multipart upload by its UploadId. All parts already uploaded for that ID are permanently removed.
Replace [BUCKET-NAME] with your bucket name, [OBJECT-KEY] with the upload’s target key, and [UPLOAD-ID] with the UploadId from the listing.
Abort a multipart upload with AWS CLI
aws s3api abort-multipart-upload \
    --bucket [BUCKET-NAME] \
    --key [OBJECT-KEY] \
    --upload-id [UPLOAD-ID]
A successful call returns no output.

Abort every incomplete multipart upload in a bucket

To clear every incomplete multipart upload at once, list them and abort each one in a loop. Use this when you are preparing a bucket for deletion or recovering from a large-scale client failure.
This shell loop pages through list-multipart-uploads and aborts every upload it finds. Replace [BUCKET-NAME] with the name of your bucket.
Abort all incomplete multipart uploads with AWS CLI
BUCKET="[BUCKET-NAME]"

aws s3api list-multipart-uploads --bucket "$BUCKET" \
    --query 'Uploads[].[Key, UploadId]' \
    --output text \
| while read -r KEY UPLOAD_ID; do
    [ -z "$KEY" ] && continue
    aws s3api abort-multipart-upload \
        --bucket "$BUCKET" \
        --key "$KEY" \
        --upload-id "$UPLOAD_ID"
  done
If the bucket has more than 1000 incomplete multipart uploads, run the loop again until list-multipart-uploads returns an empty response.

Verify the bucket is clear

After aborting, re-run the List incomplete multipart uploads procedure. The response should be empty. If you were preparing the bucket for deletion, return to Empty and delete a bucket to finish the remaining cleanup steps.

Prevent recurrence

Apply an AbortIncompleteMultipartUpload lifecycle rule to every bucket that accepts large uploads. The rule automatically aborts uploads that have not completed within a number of days you specify, and removes the parts.
Last modified on June 8, 2026