AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门。
欢迎使用新的 Amazon S3 用户指南! Amazon S3 用户指南结合了以下三个已停用的指南中的信息和说明:Amazon S3 开发人员指南、Amazon S3 控制台用户指南和 Amazon S3 入门指南。
中止分段上传
启动分段上传后,您便开始上传段。Amazon S3 将存储这些段,但它只有在您上传所有这些段并发送完成分段上传的 successful
请求(您应验证您的完成分段上传的请求是否成功)之后,才会利用这些段创建对象。在收到完成分段上传请求后,Amazon S3 会将这些段汇集在一起并创建一个对象。如果您未成功发送完成分段上传请求,则
Amazon S3 不会汇集这些段并且不会创建任何对象。
您需要为与上传的分段关联的所有存储付费。有关更多信息,请参阅 分段上传和定价。因此,完成分段上传以创建对象,或者停止分段上传以删除任意已上传的分段非常重要。
您可以使用 AWS 命令行界面 (AWS CLI)、REST API 或 AWS 开发工具包停止 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();
}
}
}
- .NET
-
以下 C# 示例将停止一周前在特定存储桶上启动的正在进行的所有分段上传。有关示例与适用于 .NET 的 AWS 开发工具包的特定版本的兼容性信息以及有关创建和测试有效示例的说明,请参阅运行 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);
}
}
}
}
您可以通过调用 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 开发工具包(低级别 API)。
AbortMultipartUploadRequest abortMPURequest = new AbortMultipartUploadRequest
{
BucketName = existingBucketName,
Key = keyName,
UploadId = initResponse.UploadId
};
await AmazonS3Client.AbortMultipartUploadAsync(abortMPURequest);
还可以中止在特定时间之前启动的所有正在进行的分段上传。对于中止未完成或已中止的分段上传,此清理操作很有用。有关更多信息,请参阅 使用 AWS 开发工具包(高级 API)。
- PHP
-
本示例介绍如何使用适用于 PHP 的 AWS 开发工具包(版本 3)中的类中止正在进行的分段上传。此部分假定您已按照使用适用于 PHP 的 AWS 开发工具包和运行 PHP 示例中的说明执行操作,并正确安装了适用于 PHP 的 AWS 开发工具包。例如,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。
有关使用 AWS CLI 停止分段上传的更多信息,请参阅 AWS CLI 命令参考中的 abort-multipart-upload。