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'S3AsyncClient
istanza senza chiamare nessuno dei multipart*
metodi sul builder
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.