Abortar um multipart upload
Após iniciar um multipart upload, você começa a fazer upload de partes. O Amazon S3 armazena essas partes, cria o objeto somente após o carregamento de todas as partes e envia uma solicitação para concluir o carregamento fracionado. Ao receber a solicitação para concluir o multipart upload, o Amazon S3 monta as partes e cria um objeto. Se você não enviar a solicitação de conclusão do carregamento fracionado, o S3 não montará as partes e não criará nenhum objeto. Se você não quiser concluir um carregamento fracionado após o upload das partes, anule o carregamento fracionado.
Você é cobrado por todo o armazenamento associado a partes enviadas por upload. É recomendável sempre concluir ou interromper o carregamento fracionado para remover todas as partes carregadas. Para obter mais informações sobre a definição de preços, consulte Multipart upload e definição de preço.
Você também pode interromper um upload incompleto de várias partes usando uma configuração de ciclo de vida do bucket. Para ter mais informações, consulte Configurar uma política de ciclo de vida de bucket para anular uploads incompletos de várias partes.
A seção a seguir mostra como interromper um carregamento fracionado em andamento no Amazon S3 usando a AWS Command Line Interface, a API REST ou os SDKs da AWS.
Para obter mais informações sobre o uso da AWS CLI para interromper um upload fracionado, consulte abort-multipart-upload na Referência de comandos da AWS CLI.
Para obter mais informações sobre o uso da API REST para interromper um multipart upload, consulte AbortMultipartUpload na Referência da API do Amazon Simple Storage Service.
- Java
-
A classe TransferManager
fornece o método abortMultipartUploads
para interromper multipart uploads em andamento. Um upload é considerado como em andamento depois que você o inicia até ser concluído ou parado. Você fornece um valor Date
e essa API interrompe todos os multipart uploads, naquele bucket, que foram iniciados antes da Date
especificada e que ainda estão em andamento.
As tarefas a seguir orientam sobre a utilização de classes Java de alto nível para interromper multipart uploads.
Processo de interrupção de multipart uploads com API de alto nível
1 |
Crie uma instância da classe TransferManager . |
2 |
Execute o método TransferManager.abortMultipartUploads passando o nome do bucket e um valor de Date . |
O código Java a seguir interrompe todos os multipart uploads em andamento que foram iniciados em um bucket específico uma semana atrás. Consulte instruções sobre como criar e testar uma amostra funcional em Getting Started no Guia do desenvolvedor do 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();
}
}
}
- .NET
-
O exemplo do C# a seguir interrompe todos os multipart uploads em andamento que foram iniciados em um bucket específico há uma semana. Para obter informações sobre como configurar e executar exemplos de código, consulte Conceitos básicos do AWS SDK for .NET no Guia do desenvolvedor do AWS SDK for .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);
}
}
}
}
É possível interromper um multipart upload em andamento chamando o método AmazonS3.abortMultipartUpload
. Esse método exclui todas as partes que foram carregadas no Amazon S3 e libera os recursos. Você deve fornecer o ID do upload, o nome do bucket e o nome da chave. O código Java de exemplo a seguir demonstra como interromper um multipart upload em andamento.
Para parar um multipart upload, é preciso fornecer o ID de upload e nomes do bucket e da chave usados no upload. Após parar um multipart upload, não é possível usar o ID de upload para fazer upload de partes adicionais. Para obter mais informações sobre multipart uploads do Amazon S3, consulte Carregar e copiar objetos usando multipart upload.
- Java
-
O exemplo de código Java a seguir interrompe um multipart upload em andamento.
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()));
Em vez de um multipart upload específico, você pode interromper todos os multipart iniciados antes de uma determinada hora que ainda estiverem em andamento. Essa operação de limpeza é útil para interromper multipart uploads antigos que você iniciou, mas não concluiu ou parou. Para obter mais informações, consulte Usar os AWS SDKs (API de alto nível).
- .NET
-
O exemplo do C# a seguir mostra como parar um multipart upload. Para um exemplo do C# completo que inclui o código seguinte, consulte Usar os AWS SDKs (API de baixo nível).
AbortMultipartUploadRequest abortMPURequest = new AbortMultipartUploadRequest
{
BucketName = existingBucketName,
Key = keyName,
UploadId = initResponse.UploadId
};
await AmazonS3Client.AbortMultipartUploadAsync(abortMPURequest);
Você também pode anular todos os multipart uploads em andamento que foram iniciados antes de um horário específico. Essa operação de limpeza é útil para anular os multipart uploads que não foram concluídos nem anulados. Para obter mais informações, consulte Usar os AWS SDKs (API de alto nível).
- PHP
-
Este exemplo descreve como usar uma classe da versão 3 do AWS SDK for PHP para anular um carregamento fracionado que está em andamento. Para obter mais informações sobre a API do AWS SDK for Ruby, acesse AWS SDK for Ruby Version 2. O exemplo do método abortMultipartUpload()
.
Para obter mais informações sobre a API do AWS SDK for Ruby, acesse AWS SDK for Ruby Version 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,
]);