Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Konfigurasikan klien async S3 berbasis Java untuk menggunakan transfer paralel
Sejak versi 2.27.5, klien async S3 berbasis Java standar mendukung transfer paralel otomatis (unggahan dan unduhan multipart). Anda mengonfigurasi dukungan untuk transfer paralel saat membuat klien asinkron S3 berbasis Java.
Bagian ini menunjukkan cara mengaktifkan transfer paralel dan cara menyesuaikan konfigurasi.
Buat sebuah instance dari S3AsyncClient
Saat Anda membuat S3AsyncClient
instance tanpa memanggil multipart*
metode apa pun di builder
Buat tanpa dukungan multipart
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();
Buat dengan dukungan multipart
Untuk mengaktifkan transfer paralel dengan pengaturan default, panggil multipartEnabled
pembangun dan teruskan true
seperti yang ditunjukkan pada contoh berikut.
S3AsyncClient s3AsyncClient2 = S3AsyncClient.builder() .multipartEnabled(true) .build();
Nilai default adalah 8 MiB untuk thresholdInBytes
dan minimumPartSizeInBytes
pengaturan.
Jika Anda menyesuaikan pengaturan multipart, transfer paralel secara otomatis diaktifkan seperti yang ditunjukkan pada berikut ini.
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();
Mengunggah aliran dengan ukuran yang tidak diketahui
Klien asinkron S3 berbasis Java dengan multipart diaktifkan dapat secara efisien menangani aliran input di mana ukuran total tidak diketahui sebelumnya:
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; }
Pendekatan ini mencegah masalah yang dapat terjadi saat menentukan panjang konten yang salah secara manual, seperti objek terpotong atau unggahan yang gagal.