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 carregamento 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 upload incompleto de várias partes usando uma configuração de ciclo de vida do 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();
}
}
}
- .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);
}
}
}
}
É 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. 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.