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, S3 Transfer Manager dapat memanfaatkan peningkatan kinerja seperti upload multipart API dan byte-range fetches.

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

Untuk menggunakan S3 Transfer Manager dengan peningkatan kinerja berdasarkan klien S3 AWS CRT berbasis, konfigurasikan file build Anda dengan dependensi berikut.

  • Gunakan versi 2.19.1 atau lebih tinggi dari SDK untuk Java 2.x.

  • Tambahkan s3-transfer-manager artefak sebagai dependensi.

  • Tambahkan aws-crt artefak sebagai dependensi pada versi 0.20.3 atau lebih tinggi.

Contoh kode berikut menunjukkan cara mengkonfigurasi dependensi proyek Anda untuk Maven.

<project> <properties> <aws.sdk.version>2.19.1</aws.sdk.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>software.amazon.awssdk</groupId> <artifactId>bom</artifactId> <version>${aws.sdk.version}</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.20.3</version> </dependency> </dependencies> </project>

Cari repositori pusat Maven untuk versi terbaru dari artefak s3-transfer-manager dan aws-crt.

Buat instance dari S3 Transfer Manager

Cuplikan berikut menunjukkan cara membuat TransferManager instance S3 dengan pengaturan default.

S3TransferManager transferManager = S3TransferManager.create();

Contoh berikut menunjukkan cara mengkonfigurasi Manajer Transfer S3 dengan pengaturan khusus. Dalam contoh ini, AsyncClient instance S3 AWS CRT berbasis digunakan sebagai klien yang mendasari S3 Transfer Manager.

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

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

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.