中止分段上传 - Amazon Simple Storage Service

中止分段上传

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

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

您还可以使用存储桶生命周期配置停止未完成的分段上传。有关更多信息,请参阅 配置存储桶生命周期配置以删除未完成的分段上传

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

有关使用 AWS CLI 停止分段上传的更多信息,请参阅《AWS CLI 命令参考》中的 abort-multipart-upload

有关使用 REST API 停止分段上传的更多信息,请参阅 Amazon Simple Storage Service API 参考中的 AbortMultipartUpload

Java

TransferManager 类提供了停止正在进行的分段上传的 abortMultipartUploads 方法。启动上传后,上传将被视为正在进行,直到您完成或停止该操作。您可以提供 Date 值和此 API 来停止该存储桶上所有在指定 Date 前启动的并且仍在进行的上传。

以下任务将引导您使用高级别 Java 类来停止分段上传。

高级别 API 分段上传停止过程

1

创建 TransferManager 类的实例。

2

通过传递存储桶名称和 Date 值执行 TransferManager.abortMultipartUploads 方法。

以下 Java 代码将停止特定存储桶上所有在一周前启动的并且仍在进行的分段上传。有关如何创建和测试有效示例的说明,请参阅《AWS SDK for Java 开发人员指南》中的入门

import java.util.Date; import com.amazonaws.AmazonClientException; import com.amazonaws.auth.profile.ProfileCredentialsProvider; import com.amazonaws.services.s3.transfer.TransferManager; public class AbortMPUUsingHighLevelAPI { public static void main(String[] args) throws Exception { String existingBucketName = "*** Provide existing bucket name ***"; TransferManager tm = new TransferManager(new ProfileCredentialsProvider()); int sevenDays = 1000 * 60 * 60 * 24 * 7; Date oneWeekAgo = new Date(System.currentTimeMillis() - sevenDays); try { tm.abortMultipartUploads(existingBucketName, oneWeekAgo); } catch (AmazonClientException amazonClientException) { System.out.println("Unable to upload file, upload was aborted."); amazonClientException.printStackTrace(); } } }
注意

您也可以停止特定的分段上传。有关更多信息,请参阅 使用 AWS SDK(低级别 API)

.NET

以下 C# 示例将停止一周前在特定存储桶上启动的正在进行的所有分段上传。有关设置和运行代码示例的信息,请参阅《适用于 .NET 的 AWS SDK 开发人员指南》中的适用于 .NET 的 AWS SDK 入门

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)

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

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

Java

以下 Java 代码示例停止正在进行的分段上传。

InitiateMultipartUploadRequest initRequest = new InitiateMultipartUploadRequest(existingBucketName, keyName); InitiateMultipartUploadResult initResponse = s3Client.initiateMultipartUpload(initRequest); AmazonS3 s3Client = new AmazonS3Client(new ProfileCredentialsProvider()); s3Client.abortMultipartUpload(new AbortMultipartUploadRequest( existingBucketName, keyName, initResponse.getUploadId()));
注意

您可以在特定时间之前停止所有仍在进行的分段上传,而不是停止某个特定的分段上传。此清理操作对于停止您已启动但未完成或停止的旧分段上传非常有用。有关更多信息,请参阅 使用 AWS 软件开发工具包(高级别 API)

.NET

以下 C# 示例演示如何停止分段上传。有关包含以下代码的完整 C# 示例,请参阅 使用 AWS SDK(低级别 API)

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

还可以中止在特定时间之前启动的所有正在进行的分段上传。对于中止未完成或已中止的分段上传,此清理操作很有用。有关更多信息,请参阅 使用 AWS 软件开发工具包(高级别 API)

PHP

本示例介绍如何使用 AWS SDK for PHP 的版本 3 中的类中止正在进行的分段上传。有关适用于 Ruby 的 AWS 开发工具包 API 的更多信息,请转到适用于 Ruby 的 AWS 开发工具包 – 版本 2。例如,abortMultipartUpload() 方法。

有关适用于 Ruby 的 AWS 开发工具包 API 的更多信息,请转到适用于 Ruby 的 AWS 开发工具包 – 版本 2

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, ]);