Abortar um multipart upload - Amazon Simple Storage Service

Abortar um multipart upload

Após iniciar um multipart upload, você começa a fazer upload de partes. O Amazon S3 armazena essas partes, mas cria o objeto a partir das partes somente após o upload de todas e envia uma solicitação successful para concluir o multipart upload (você deve verificar se a solicitação para concluir o multipart upload teve êxito). 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 multipart upload, o Amazon S3 não montará as partes e não criará nenhum objeto.

Você é cobrado por todo o armazenamento associado a partes enviadas por upload. Para obter mais informações, consulte Multipart upload e definição de preço. Portanto, é importante que você conclua o multipart upload para ter o objeto criado ou pare o multipart upload para remover todas as partes enviadas por upload.

Você pode interromper um upload fracionado em andamento no Amazon S3 usando a AWS Command Line Interface (AWS CLI), a API REST ou os AWS SDKs. Você também pode interromper um multipart upload incompleto usando uma política de ciclo de vida de bucket.

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. Para obter instruções sobre como criar e testar um exemplo funcional, consulte Testar exemplos de código Java no Amazon S3.

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(); } } }
nota

Você também pode parar um multipart upload específico. Para obter mais informações, consulte Uso dos AWS SDKs (API de baixo nível).

.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 a compatibilidade do exemplo com uma versão específica do AWS SDK for .NET e instruções para criar e testar um exemplo funcional, consulte Executar os exemplos de código do 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); } } } }
nota

Você também pode parar um multipart upload específico. Para obter mais informações, consulte Uso dos AWS SDKs (API de baixo nível).

É 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()));
nota

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 Uso dos 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 Uso dos 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 Uso dos AWS SDKs (API de alto nível).

PHP

Este tópico descreve como usar uma classe da versão 3 do AWS SDK for PHP para anular um upload fracionado que está em andamento. Pressupõe-se que você já esteja seguindo as instruções para Usar o AWS SDK for PHP e executar exemplos do PHP e tenha o AWS SDK for PHP devidamente instalado. O exemplo do método abortMultipartUpload().

Para obter informações sobre a execução dos exemplos de PHP neste guia, consulte Executar exemplos do 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, ]);

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.

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.