Anulación de la carga multiparte
Comience a cargar las partes luego de iniciar una carga multiparte. Amazon S3 almacena estas partes, pero crea el objeto de las partes solo después de que usted las carga y envía una solicitud successful
para completar la carga multiparte (debe comprobar si la solicitud para completar una carga multiparte es correcta). Al recibir la solicitud de carga multiparte completa, Amazon S3 combina las partes y crea un objeto. Si no envía correctamente la solicitud de carga multiparte completa, Amazon S3 no combina las partes y no crea un objeto.
Se facturará todo el almacenamiento asociado con las partes cargadas. Para obtener más información, consulte Carga multiparte y precios. Por lo tanto, es importante que complete la carga multiparte para que se cree el objeto o detenga la carga multiparte a fin de eliminar las partes cargadas.
Puede detener una carga multiparte en curso en Amazon S3 mediante AWS Command Line Interface (AWS CLI), la API de REST o los SDK de AWS. También puede detener una carga multiparte incompleta mediante una configuración de ciclo de vida del bucket.
- Java
La clase TransferManager
proporciona el método abortMultipartUploads
para detener cargas multiparte en curso. Una carga se considera en curso después de que la inicia y hasta que la completa o detiene. Cuando provee un valor de Date
, esta API detiene todas las cargas multiparte, en ese bucket, que se iniciaron antes de la Date
especificada y que aún están en curso.
Las siguientes tareas lo guían a través del proceso de uso de las clases de Java de alto nivel para detener cargas multiparte.
Proceso de detención de cargas multiparte de la API de alto nivel
1 |
Cree una instancia de la clase TransferManager . |
2 |
Ejecute el método TransferManager.abortMultipartUploads y pase el nombre del bucket y un valor de Date . |
El siguiente código Java detiene todas las cargas multiparte en curso que se iniciaron en un bucket específico hace más de una semana. Para obtener instrucciones sobre cómo crear y probar una muestra funcional, consulte Introducción en la Guía del desarrollador de 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
-
En el siguiente ejemplo de código C# se detienen todas las cargas multiparte en curso que se iniciaron en un bucket específico hace una semana. Para obtener información acerca de cómo configurar y ejecutar ejemplos de código, consulte Introducción al SDK de AWS para .NET en la Guía para desarrolladores del SDK de AWS para .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);
}
}
}
}
Puede detener una carga multiparte en curso si llama al método AmazonS3.abortMultipartUpload
. Este método elimina cualquier parte cargada Amazon S3 y libera los recursos. Deberá proporcionar el ID de carga, el nombre del bucket y el nombre de clave. En el siguiente ejemplo de código Java se muestra cómo detener una carga multiparte en curso.
Para detener una carga multiparte, debe proporcionar el ID de carga y los nombres de clave y bucket que se usaron en la carga. Luego de haber detenido una carga multiparte, no puede usar el ID de carga para cargar partes adicionales. Para obtener más información acerca de las cargas multiparte en Amazon S3, consulte Carga y copia de objetos con la carga multiparte.
- Java
En el siguiente ejemplo de código Java se detiene una carga multiparte en curso.
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()));
En lugar de una carga multiparte específica, puede detener todas las cargas multiparte iniciadas antes de un periodo de tiempo específico que siguen en proceso. Esta operación de limpieza es útil para detener las cargas multiparte antiguas que inició pero que no se completaron o detuvieron. Para obtener más información, consulte Uso de los AWS SDK (API de alto nivel).
- .NET
En el siguiente ejemplo en C# se muestra cómo detener una carga multiparte. Para ver una muestra completa de código C# que incluye el código siguiente, consulte Uso de los AWS SDK (API de bajo nivel).
AbortMultipartUploadRequest abortMPURequest = new AbortMultipartUploadRequest
{
BucketName = existingBucketName,
Key = keyName,
UploadId = initResponse.UploadId
};
await AmazonS3Client.AbortMultipartUploadAsync(abortMPURequest);
También puede anular todas las cargas multiparte en curso que se iniciaron antes de un periodo de tiempo específico. Esta operación de limpieza resulta útil para anular cargas multiparte que no se finalizaron o que se anularon. Para obtener más información, consulte Uso de los AWS SDK (API de alto nivel).
- PHP
En este ejemplo, se muestra cómo utilizar una clase de la versión 3 de AWS SDK for PHP a fin de anular una carga multiparte que está en curso. Para obtener más información acerca de la API del SDK de AWS para Ruby, consulte SDK de AWS para Ruby, versión 2. El ejemplo es el método abortMultipartUpload()
.
Para obtener más información acerca de la API del SDK de AWS para Ruby, consulte SDK de AWS para Ruby, versión 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,
]);
Para obtener más información sobre el uso de la API de REST a fin de detener una carga multiparte, consulte AbortMultipartUpload en la Referencia de API de Amazon Simple Storage Service.
Para obtener más información acerca del uso de la AWS CLI a fin de detener una carga multiparte, consulte abort-multipart-upload en la Referencia de comandos de la AWS CLI.