

# 中止分段上传
<a name="abort-mpu"></a>

启动分段上传后，您便开始上传段。Amazon S3 存储这些分段，并且仅当您上传了所有分段并发送请求来完成分段上传后，才创建对象。在收到完成分段上传请求后，Amazon S3 会将这些段汇集在一起并创建一个对象。如果您未成功发送完成分段上传请求，S3 不会汇集这些分段，并且不会创建任何对象。如果您不希望在上传各分段后完成分段上传，则应中止分段上传。

您需要为与上传的分段关联的所有存储付费。建议务必完成分段上传，或者停止分段上传来移除任何已上传的分段。有关定价的更多信息，请参阅[分段上传和定价](mpuoverview.md#mpuploadpricing)。

您还可以使用存储桶生命周期配置停止未完成的分段上传。有关更多信息，请参阅 [配置存储桶生命周期配置以删除未完成的分段上传](mpu-abort-incomplete-mpu-lifecycle-config.md)。

下一节介绍如何使用 AWS Command Line Interface、REST API 或 AWS SDK 来停止 Amazon S3 中正在进行的分段上传。

## 使用 AWS CLI
<a name="abort-mpu-cli"></a>

有关使用 AWS CLI 停止分段上传的更多信息，请参阅《AWS CLI 命令参考》**中的 [abort-multipart-upload](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/s3api/abort-multipart-upload.html)。

## 使用 REST API
<a name="abort-mpu-rest"></a>

有关使用 REST API 停止分段上传的更多信息，请参阅 *Amazon Simple Storage Service API 参考*中的 [AbortMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html)。

## 使用 AWS SDK（高级别 API）
<a name="abort-mpu-high-level"></a>

------
#### [ Java ]

要使用适用于 Java 的 AWS SDK 停止正在进行的分段上传，可以中止在指定的日期之前启动但仍在进行的上传。启动上传后，上传将被视为正在进行，直到您完成或停止该操作。

要停止分段上传，您可以：


|  |  | 
| --- |--- |
| 1 | 创建 S3Client 实例。 | 
| 2 | 通过传递存储桶名称和其它必需的参数，使用客户端的中止方法。 | 

**注意**  
您也可以停止特定的分段上传。有关更多信息，请参阅 [使用 AWS SDK（低级别 API）](#abort-mpu-low-level)。

有关如何使用适用于 Java 的 AWS SDK 中止分段上传的示例，请参阅《Amazon S3 API Reference》**中的 [Cancel a multipart upload](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_AbortMultipartUpload_section.html)。

------
#### [ .NET ]

以下 C\$1 示例将停止一周前在特定存储桶上启动的正在进行的所有分段上传。有关设置和运行代码示例的信息，请参阅《适用于 .NET 的 AWS SDK 开发人员指南》**中的[适用于 .NET 的 AWS SDK 入门](https://docs.aws.amazon.com/sdk-for-net/latest/developer-guide/net-dg-setup.html)。

```
using Amazon;
using Amazon.S3;
using Amazon.S3.Transfer;
using System;
using System.Threading.Tasks;

namespace Amazon.DocSamples.S3
{
    class AbortMPUUsingHighLevelAPITest
    {
        private const string bucketName = "*** provide bucket name ***";
        // Specify your bucket region (an example region is shown).
        private static readonly RegionEndpoint bucketRegion = RegionEndpoint.USWest2;
        private static IAmazonS3 s3Client;

        public static void Main()
        {
            s3Client = new AmazonS3Client(bucketRegion);
            AbortMPUAsync().Wait();
        }

        private static async Task AbortMPUAsync()
        {
            try
            {
                var transferUtility = new TransferUtility(s3Client);

                // Abort all in-progress uploads initiated before the specified date.
                await transferUtility.AbortMultipartUploadsAsync(
                    bucketName, DateTime.Now.AddDays(-7));
            }
            catch (AmazonS3Exception e)
            {
                Console.WriteLine("Error encountered on server. Message:'{0}' when writing an object", e.Message);
            }
            catch (Exception e)
            {
                Console.WriteLine("Unknown encountered on server. Message:'{0}' when writing an object", e.Message);
            }
        } 
    }
}
```

**注意**  
您也可以停止特定的分段上传。有关更多信息，请参阅 [使用 AWS SDK（低级别 API）](#abort-mpu-low-level)。

------

## 使用 AWS SDK（低级别 API）
<a name="abort-mpu-low-level"></a>

您可以通过调用 `AmazonS3.abortMultipartUpload` 方法停止正在进行的分段上传。此方法将删除任何已上传到 Amazon S3 的分段并释放资源。您必须提供上传 ID、存储桶名称和键名称。以下 Java 代码示例演示如何停止正在进行的分段上传。

要停止分段上传，请提供上传时使用的上传 ID、存储桶名称和键名。停止一个分段上传之后，您便无法使用相应的上传 ID 上传其他分段。有关 Amazon S3 分段上传的更多信息，请参阅 [在 Amazon S3 中使用分段上传来上传和复制对象](mpuoverview.md)。

------
#### [ Java ]

要使用适用于 Java 的 AWS SDK 停止正在进行的特定分段上传，可以使用低级别 API 通过提供存储桶名称、对象键和上传 ID 来中止上传。

**注意**  
可以停止所有在特定时间之前启动但仍在进行的分段上传，而不是中止某个特定的分段上传。此清理操作对于停止您已启动但未完成或停止的旧分段上传非常有用。有关更多信息，请参阅 [使用 AWS SDK（高级别 API）](#abort-mpu-high-level)。

有关如何使用适用于 Java 的 AWS SDK 中止特定分段上传的示例，请参阅《Amazon S3 API Reference》**中的 [Cancel a multipart upload](https://docs.aws.amazon.com/AmazonS3/latest/API/s3_example_s3_AbortMultipartUpload_section.html)。

------
#### [ .NET ]

以下 C\$1 示例演示如何停止分段上传。有关包含以下代码的完整 C\$1 示例，请参阅 [使用 AWS SDK（低级别 API）](mpu-upload-object.md#mpu-upload-low-level)。

```
AbortMultipartUploadRequest abortMPURequest = new AbortMultipartUploadRequest
{
    BucketName = existingBucketName,
    Key = keyName,
    UploadId = initResponse.UploadId
};
await AmazonS3Client.AbortMultipartUploadAsync(abortMPURequest);
```

还可以中止在特定时间之前启动的所有正在进行的分段上传。对于中止未完成或已中止的分段上传，此清理操作很有用。有关更多信息，请参阅 [使用 AWS SDK（高级别 API）](#abort-mpu-high-level)。

------
#### [ PHP ]

本示例介绍如何使用 适用于 PHP 的 AWS SDK 的版本 3 中的类中止正在进行的分段上传。有关适用于 Ruby 的 AWS 开发工具包 API 的更多信息，请转到[适用于 Ruby 的 AWS 开发工具包 – 版本 2](https://docs.aws.amazon.com/sdkforruby/api/index.html)。例如，`abortMultipartUpload()` 方法。

有关适用于 Ruby 的 AWS 开发工具包 API 的更多信息，请转到[适用于 Ruby 的 AWS 开发工具包 – 版本 2](https://docs.aws.amazon.com/sdkforruby/api/index.html)。

```
 require 'vendor/autoload.php';

use Aws\S3\S3Client;

$bucket = '*** Your Bucket Name ***';
$keyname = '*** Your Object Key ***';
$uploadId = '*** Upload ID of upload to Abort ***';

$s3 = new S3Client([
    'version' => 'latest',
    'region'  => 'us-east-1'
]);

// Abort the multipart upload.
$s3->abortMultipartUpload([
    'Bucket'   => $bucket,
    'Key'      => $keyname,
    'UploadId' => $uploadId,
]);
```

------