中止分段上传 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

中止分段上传

启动分段上传后,您便开始上传段。Amazon S3 将存储这些段,但它只有在您上传所有这些段并发送完成分段上传的 successful 请求(您应验证您的完成分段上传的请求是否成功)之后,才会利用这些段创建对象。在收到完成分段上传请求后,Amazon S3 会将这些段汇集在一起并创建一个对象。如果您未成功发送完成分段上传请求,则 Amazon S3 不会汇集这些段并且不会创建任何对象。

您需要为与上传的分段关联的所有存储付费。有关更多信息,请参阅分段上传和定价。因此,完成分段上传以创建对象,或者停止分段上传以删除任意已上传的分段非常重要。

您可以使用 Amazon Command Line Interface(Amazon CLI)、REST API 或 Amazon SDK 停止 Amazon S3 中正在进行的分段上传。您还可以使用存储桶生命周期配置停止未完成的分段上传。

Java

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

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

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

1

创建 TransferManager 类的实例。

2

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

以下 Java 代码将停止特定存储桶上所有在一周前启动的并且仍在进行的分段上传。有关如何创建和测试有效示例的说明,请参阅 测试 Amazon S3 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(); } } }
注意

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

.NET

以下 C# 示例将停止一周前在特定存储桶上启动的正在进行的所有分段上传。有关示例与特定版本的Amazon SDK for .NET的兼容性的信息以及有关创建和测试有效示例的说明,请参阅运行 Amazon S3 .NET 代码示例

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); } } } }
注意

您也可以停止特定的分段上传。有关更多信息,请参阅使用 Amazon 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()));
注意

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

.NET

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

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

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

PHP

本示例介绍如何使用 Amazon SDK for PHP 的版本 3 中的类中止正在进行的分段上传。本主题假定您已按照 使用Amazon SDK for PHP和运行 PHP 示例 的说明执行操作,并正确安装了 Amazon SDK for PHP。例如,abortMultipartUpload() 方法。

有关运行本指南中的 PHP 示例的信息,请参阅 运行 PHP 示例

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

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

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