Configuración del cliente asincrónico S3 basado en Java para usar transferencias paralelas - AWS SDK for Java 2.x

Configuración del cliente asincrónico S3 basado en Java para usar transferencias paralelas

Desde la versión 2.27.5, el cliente asincrónico estándar de S3 basado en Java admite transferencias paralelas automáticas (cargas y descargas multiparte). La compatibilidad con las transferencias paralelas se configura al crear el cliente asincrónico de S3 basado en Java.

En esta sección se muestra cómo habilitar las transferencias paralelas y cómo personalizar la configuración.

Cree una instancia de S3AsyncClient

Cuando se crea una instancia de S3AsyncClient sin llamar a ninguno de los métodos multipart* en el generador, no se habilitan las transferencias paralelas. Cada una de las siguientes instrucciones crea un cliente asincrónico de S3 basado en Java sin compatibilidad con cargas y descargas multiparte.

Creación sin compatibilidad multiparte

import software.amazon.awssdk.auth.credentials.ProcessCredentialsProvider; import software.amazon.awssdk.regions.Region; import software.amazon.awssdk.services.s3.S3AsyncClient; S3AsyncClient s3Client = S3AsyncClient.create(); S3AsyncClient s3Client2 = S3AsyncClient.builder().build(); S3AsyncClient s3Client3 = S3AsyncClient.builder() .credentialsProvider(ProcessCredentialsProvider.builder().build()) .region(Region.EU_NORTH_1) .build();

Creación con compatibilidad multiparte

Para habilitar transferencias paralelas con configuración predeterminada, llame al multipartEnabled en el generador y pase true como se muestra en el siguiente ejemplo.

S3AsyncClient s3AsyncClient2 = S3AsyncClient.builder() .multipartEnabled(true) .build();

El valor predeterminado es 8 MiB para la configuración de thresholdInBytes y minimumPartSizeInBytes.

Si personaliza la configuración multiparte, las transferencias paralelas se habilitan automáticamente, como se muestra a continuación.

import software.amazon.awssdk.services.s3.S3AsyncClient; import static software.amazon.awssdk.transfer.s3.SizeConstant.MB; S3AsyncClient s3AsyncClient2 = S3AsyncClient.builder() .multipartConfiguration(b -> b .thresholdInBytes(16 * MB) .minimumPartSizeInBytes(10 * MB)) .build();

Carga de flujos de tamaño desconocido

El cliente asincrónico de S3 basado en Java con multiparte habilitada puede controlar eficientemente flujos de entrada cuando el tamaño total no se conozca de antemano:

public PutObjectResponse asyncClient_multipart_stream_unknown_size(String bucketName, String key, InputStream inputStream) { S3AsyncClient s3AsyncClient = S3AsyncClient.builder().multipartEnabled(true).build(); ExecutorService executor = Executors.newSingleThreadExecutor(); AsyncRequestBody body = AsyncRequestBody.fromInputStream(inputStream, null, executor); // 'null' indicates that the // content length is unknown. CompletableFuture<PutObjectResponse> responseFuture = s3AsyncClient.putObject(r -> r.bucket(bucketName).key(key), body) .exceptionally(e -> { if (e != null) { logger.error(e.getMessage(), e); } return null; }); PutObjectResponse response = responseFuture.join(); // Wait for the response. executor.shutdown(); return response; }

Este método evita los problemas que pueden surgir al especificar manualmente una longitud de contenido incorrecta, como objetos truncados o cargas fallidas.