Configura il client asincrono S3 basato su Java per utilizzare trasferimenti paralleli - AWS SDK for Java 2.x

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Configura il client asincrono S3 basato su Java per utilizzare trasferimenti paralleli

Dalla versione 2.27.5, il client asincrono S3 standard basato su Java supporta trasferimenti paralleli automatici (caricamenti e download multiparte). Il supporto per i trasferimenti paralleli viene configurato quando si crea il client asincrono S3 basato su Java.

Questa sezione mostra come abilitare i trasferimenti paralleli e come personalizzare la configurazione.

Creare un'istanza di S3AsyncClient

Quando crei un'S3AsyncClientistanza senza chiamare nessuno dei multipart* metodi sul builder, i trasferimenti paralleli non sono abilitati. Ciascuna delle seguenti istruzioni crea un client asincrono S3 basato su Java senza supporto per caricamenti e download multiparte.

Crea senza supporto 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();

Crea con il supporto multiparte

Per abilitare i trasferimenti paralleli con le impostazioni predefinite, chiama multipartEnabled on the builder e passali true come mostrato nell'esempio seguente.

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

Il valore predefinito è 8 MiB per thresholdInBytes e minimumPartSizeInBytes impostazioni.

Se si personalizzano le impostazioni multiparte, i trasferimenti paralleli vengono abilitati automaticamente come illustrato di seguito.

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

Caricamento di stream di dimensioni sconosciute

Il client asincrono S3 basato su Java con multipart abilitato è in grado di gestire in modo efficiente i flussi di input in cui la dimensione totale non è nota in anticipo:

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; }

Questo approccio previene i problemi che possono verificarsi quando si specifica manualmente una lunghezza errata del contenuto, come oggetti troncati o caricamenti non riusciti.