Transfer file dan direktori dengan Amazon S3 Transfer Manager - AWS SDK for Java 2.x

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Transfer file dan direktori dengan Amazon S3 Transfer Manager

Amazon S3 Transfer Manager adalah sumber terbuka, utilitas transfer file tingkat tinggi untuk file. AWS SDK for Java 2.x Gunakan untuk mentransfer file dan direktori ke dan dari Amazon Simple Storage Service (Amazon S3).

Ketika dibangun di atas klien S3 AWS CRT berbasis atau klienasinkron S3 berbasis Java standar dengan multipart diaktifkan, S3 Transfer Manager dapat memanfaatkan peningkatan kinerja seperti upload multipart dan byte-range fetches. API

Dengan S3 Transfer Manager, Anda juga dapat memantau kemajuan transfer secara real time dan menjeda transfer untuk eksekusi nanti.

Memulai

Tambahkan dependensi ke file build Anda

Untuk menggunakan S3 Transfer Manager dengan performa multipart yang disempurnakan, konfigurasikan file build Anda dengan dependensi yang diperlukan.

Use the AWS CRT-based S3 client
<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.27.211</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3-transfer-manager</artifactId> </dependency> <dependency> <groupId>software.amazon.awssdk.crt</groupId> <artifactId>aws-crt</artifactId> <version>0.29.1432</version> </dependency> </dependencies>

1 Versi terbaru. 2 Versi terbaru.

Use the Java-based S3 async client
<dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>2.27.211</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>s3-transfer-manager</artifactId> </dependency> </dependencies>

1 Versi terbaru.

Buat instance dari S3 Transfer Manager

Untuk mengaktifkan transfer paralel, Anda harus meneruskan klien S3 AWS CRT berbasis ATAU klien async S3 berbasis Java dengan multipart diaktifkan. Contoh berikut menunjukkan cara mengkonfigurasi Manajer Transfer S3 dengan pengaturan khusus.

Use the AWS CRT-based S3 client
S3AsyncClient s3AsyncClient = S3AsyncClient.crtBuilder() .credentialsProvider(DefaultCredentialsProvider.create()) .region(Region.US_EAST_1) .targetThroughputInGbps(20.0) .minimumPartSizeInBytes(8 * MB) .build(); S3TransferManager transferManager = S3TransferManager.builder() .s3Client(s3AsyncClient) .build();
Use the Java-based S3 async client

Jika aws-crt dependensi tidak disertakan dalam file build, S3 Transfer Manager dibangun di atas klien asinkron S3 berbasis Java standar yang digunakan dalam for Java 2.x. SDK

Konfigurasi kustom klien S3 - memerlukan multipart diaktifkan

S3AsyncClient s3AsyncClient = S3AsyncClient.builder() .multipartEnabled(true) .credentialsProvider(DefaultCredentialsProvider.create()) .region(Region.US_EAST_1) .targetThroughputInGbps(20.0) .minimumPartSizeInBytes(8 * MB) .build(); S3TransferManager transferManager = S3TransferManager.builder() .s3Client(s3AsyncClient) .build();

Tidak ada konfigurasi klien S3 - dukungan multipart diaktifkan secara otomatis

S3TransferManager transferManager = S3TransferManager.create();

Unggah file ke bucket S3

Contoh berikut menunjukkan contoh upload file bersama dengan penggunaan opsional dari LoggingTransferListener, yang mencatat kemajuan upload.

Untuk mengunggah file ke Amazon S3 menggunakan S3 Transfer Manager, teruskan UploadFileRequestobjek ke metode iniS3TransferManager. uploadFile

FileUploadObjek yang dikembalikan dari uploadFile metode mewakili proses upload. Setelah permintaan selesai, CompletedFileUploadobjek berisi informasi tentang unggahan.

public String uploadFile(S3TransferManager transferManager, String bucketName, String key, URI filePathURI) { UploadFileRequest uploadFileRequest = UploadFileRequest.builder() .putObjectRequest(b -> b.bucket(bucketName).key(key)) .source(Paths.get(filePathURI)) .build(); FileUpload fileUpload = transferManager.uploadFile(uploadFileRequest); CompletedFileUpload uploadResult = fileUpload.completionFuture().join(); return uploadResult.response().eTag(); }
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.transfer.s3.S3TransferManager; import software.amazon.awssdk.transfer.s3.model.CompletedFileUpload; import software.amazon.awssdk.transfer.s3.model.FileUpload; import software.amazon.awssdk.transfer.s3.model.UploadFileRequest; import software.amazon.awssdk.transfer.s3.progress.LoggingTransferListener; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Paths; import java.util.UUID;

Unduh file dari ember S3

Contoh berikut menunjukkan contoh download bersama dengan penggunaan opsional dari LoggingTransferListener, yang mencatat kemajuan download.

Untuk mengunduh objek dari bucket S3 menggunakan S3 Transfer Manager, buat DownloadFileRequestobjek dan teruskan ke metode. downloadFile

FileDownloadObjek yang S3TransferManager dikembalikan oleh downloadFile metode ini mewakili transfer file. Setelah unduhan selesai, CompletedFileDownloadberisi akses ke informasi tentang unduhan.

public Long downloadFile(S3TransferManager transferManager, String bucketName, String key, String downloadedFileWithPath) { DownloadFileRequest downloadFileRequest = DownloadFileRequest.builder() .getObjectRequest(b -> b.bucket(bucketName).key(key)) .destination(Paths.get(downloadedFileWithPath)) .build(); FileDownload downloadFile = transferManager.downloadFile(downloadFileRequest); CompletedFileDownload downloadResult = downloadFile.completionFuture().join(); logger.info("Content length [{}]", downloadResult.response().contentLength()); return downloadResult.response().contentLength(); }
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.transfer.s3.S3TransferManager; import software.amazon.awssdk.transfer.s3.model.CompletedFileDownload; import software.amazon.awssdk.transfer.s3.model.DownloadFileRequest; import software.amazon.awssdk.transfer.s3.model.FileDownload; import software.amazon.awssdk.transfer.s3.progress.LoggingTransferListener; import java.io.IOException; import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.UUID;

Salin objek Amazon S3 ke ember lain

Contoh berikut menunjukkan cara menyalin objek dengan S3 Transfer Manager.

Untuk memulai salinan objek dari bucket S3 ke bucket lain, buat CopyObjectRequestinstance dasar.

Selanjutnya, bungkus dasar CopyObjectRequest dalam CopyRequestyang dapat digunakan oleh S3 Transfer Manager.

CopyObjek yang dikembalikan oleh copy metode ini mewakili proses penyalinan. S3TransferManager Setelah proses penyalinan selesai, CompletedCopyobjek berisi detail tentang respons.

public String copyObject(S3TransferManager transferManager, String bucketName, String key, String destinationBucket, String destinationKey) { CopyObjectRequest copyObjectRequest = CopyObjectRequest.builder() .sourceBucket(bucketName) .sourceKey(key) .destinationBucket(destinationBucket) .destinationKey(destinationKey) .build(); CopyRequest copyRequest = CopyRequest.builder() .copyObjectRequest(copyObjectRequest) .build(); Copy copy = transferManager.copy(copyRequest); CompletedCopy completedCopy = copy.completionFuture().join(); return completedCopy.response().copyObjectResult().eTag(); }
catatan

Untuk melakukan salinan Lintas wilayah dengan S3 Transfer Manager, aktifkan crossRegionAccessEnabled pada pembuat klien S3 AWS CRT berbasis seperti yang ditunjukkan pada cuplikan berikut.

S3AsyncClient s3AsyncClient = S3AsyncClient.crtBuilder() .crossRegionAccessEnabled(true) .build(); S3TransferManager transferManager = S3TransferManager.builder() .s3Client(s3AsyncClient) .build();
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.services.s3.model.CopyObjectRequest; import software.amazon.awssdk.transfer.s3.S3TransferManager; import software.amazon.awssdk.transfer.s3.model.CompletedCopy; import software.amazon.awssdk.transfer.s3.model.Copy; import software.amazon.awssdk.transfer.s3.model.CopyRequest; import java.util.UUID;

Unggah direktori lokal ke bucket S3

Contoh berikut menunjukkan bagaimana Anda dapat meng-upload direktori lokal ke S3.

Mulailah dengan memanggil uploadDirectorymetode S3TransferManager instance, meneruskan file UploadDirectoryRequest.

DirectoryUploadObjek mewakili proses upload, yang menghasilkan CompletedDirectoryUploadketika permintaan selesai. CompleteDirectoryUploadObjek berisi informasi tentang hasil transfer, termasuk file mana yang gagal ditransfer.

public Integer uploadDirectory(S3TransferManager transferManager, URI sourceDirectory, String bucketName) { DirectoryUpload directoryUpload = transferManager.uploadDirectory(UploadDirectoryRequest.builder() .source(Paths.get(sourceDirectory)) .bucket(bucketName) .build()); CompletedDirectoryUpload completedDirectoryUpload = directoryUpload.completionFuture().join(); completedDirectoryUpload.failedTransfers() .forEach(fail -> logger.warn("Object [{}] failed to transfer", fail.toString())); return completedDirectoryUpload.failedTransfers().size(); }
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.services.s3.model.ObjectIdentifier; import software.amazon.awssdk.transfer.s3.S3TransferManager; import software.amazon.awssdk.transfer.s3.model.CompletedDirectoryUpload; import software.amazon.awssdk.transfer.s3.model.DirectoryUpload; import software.amazon.awssdk.transfer.s3.model.UploadDirectoryRequest; import java.net.URI; import java.net.URISyntaxException; import java.net.URL; import java.nio.file.Paths; import java.util.UUID;

Unduh objek bucket S3 ke direktori lokal

Anda dapat mengunduh objek dalam bucket S3 ke direktori lokal seperti yang ditunjukkan pada contoh berikut.

Untuk mengunduh objek dalam bucket S3 ke direktori lokal, mulailah dengan memanggil downloadDirectorymetode Transfer Manager, meneruskan file. DownloadDirectoryRequest

DirectoryDownloadObjek mewakili proses download, yang menghasilkan CompletedDirectoryDownloadketika permintaan selesai. CompleteDirectoryDownloadObjek berisi informasi tentang hasil transfer, termasuk file mana yang gagal ditransfer.

public Integer downloadObjectsToDirectory(S3TransferManager transferManager, URI destinationPathURI, String bucketName) { DirectoryDownload directoryDownload = transferManager.downloadDirectory(DownloadDirectoryRequest.builder() .destination(Paths.get(destinationPathURI)) .bucket(bucketName) .build()); CompletedDirectoryDownload completedDirectoryDownload = directoryDownload.completionFuture().join(); completedDirectoryDownload.failedTransfers() .forEach(fail -> logger.warn("Object [{}] failed to transfer", fail.toString())); return completedDirectoryDownload.failedTransfers().size(); }
import org.slf4j.Logger; import org.slf4j.LoggerFactory; import software.amazon.awssdk.core.sync.RequestBody; import software.amazon.awssdk.services.s3.model.ObjectIdentifier; import software.amazon.awssdk.transfer.s3.S3TransferManager; import software.amazon.awssdk.transfer.s3.model.CompletedDirectoryDownload; import software.amazon.awssdk.transfer.s3.model.DirectoryDownload; import software.amazon.awssdk.transfer.s3.model.DownloadDirectoryRequest; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.HashSet; import java.util.Set; import java.util.UUID; import java.util.stream.Collectors;

Lihat contoh lengkap

GitHub berisi kode lengkap untuk semua contoh di halaman ini.