Menggunakan TransferManager untukAmazon S3Operasi - AWS SDK for Java 1.x

AWS SDK for Java 1.x telah memasuki mode pemeliharaan pada 31 Juli 2024, dan akan mencapai end-of-supportpada 31 Desember 2025. Kami menyarankan Anda bermigrasi ke AWS SDK for Java 2.xuntuk terus menerima fitur baru, peningkatan ketersediaan, dan pembaruan keamanan.

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

Menggunakan TransferManager untukAmazon S3Operasi

Anda dapat menggunakanAWS SDK for Java TransferManager kelas untuk andal mentransfer file dari lingkungan lokal keAmazon S3dan untuk menyalin objek dari satu lokasi S3 ke lokasi lainnya.TransferManagerbisa mendapatkan kemajuan transfer dan jeda atau melanjutkan upload dan download.

catatan

Praktik terbaik

Kami sarankan Anda mengaktifkanAbortIncompleteMultipartUploadaturan siklus hidupAmazon S3ember.

Aturan ini mengarahkanAmazon S3untuk membatalkan unggahan multi-bagian yang tidak selesai dalam jumlah hari tertentu setelah dimulai. Ketika batas waktu yang ditetapkan terlampaui,Amazon S3membatalkan upload dan kemudian menghapus data upload yang tidak lengkap.

Untuk informasi selengkapnya, lihatKonfigurasi Siklus Hidup untuk Bucket dengan VersioningdiAmazon S3Panduan Pengguna.

catatan

Contoh-contoh kode ini berasumsi bahwa Anda memahami materi diMenggunakanAWS SDK for Javadan telah dikonfigurasi defaultAWSkredensi menggunakan informasi diMengaturAWSKredensial dan Wilayah untuk Pembangunan.

Upload File dan Direktori

TransferManager dapat meng-upload file, daftar file, dan direktori ke setiapAmazon S3ember yang Anda milikisebelumnya dibuat.

Meng-unggah File Tunggal

Hubungi TransferManageruploadmetode, menyediakanAmazon S3nama bucket, kunci (objek) nama, dan Java standarBerkasobjek yang mewakili file untuk meng-unggah.

Impor

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.transfer.MultipleFileUpload; import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.TransferManagerBuilder; import com.amazonaws.services.s3.transfer.Upload; import java.io.File; import java.util.ArrayList; import java.util.Arrays;

Kode

File f = new File(file_path); TransferManager xfer_mgr = TransferManagerBuilder.standard().build(); try { Upload xfer = xfer_mgr.upload(bucket_name, key_name, f); // loop with Transfer.isDone() XferMgrProgress.showTransferProgress(xfer); // or block with Transfer.waitForCompletion() XferMgrProgress.waitForCompletion(xfer); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } xfer_mgr.shutdownNow();

Parameteruploadmetode pengembalianlangsung, menyediakanUploadobjek yang akan digunakan untuk memeriksa status transfer atau menunggu sampai selesai.

LihatTunggu Transfer untuk Menyelesaikanuntuk informasi tentang menggunakanwaitForCompletionuntuk berhasil menyelesaikan transfer sebelum memanggil TransferManagershutdownNowmetode. Sambil menunggu transfer selesai, Anda dapat memilih atau mendengarkan pembaruan tentang status dan kemajuannya. LihatDapatkan Status Transfer dan Kemajuanuntuk informasi lebih lanjut.

LihatLengkapi Contohdi GitHub.

Unggah Daftar File

Untuk mengunggah beberapa file dalam satu operasi, panggil TransferManageruploadFileList, memberikan hal berikut:

  • SesiAmazon S3nama bucket

  • SEBUAHprefiks kunciuntuk menambahkan nama-nama objek yang dibuat (jalan dalam ember di mana untuk menempatkan objek)

  • SEBUAHBerkasobjek yang mewakili direktori relatif dari yang untuk membuat path file

  • SEBUAHDaftarobjek yang berisi satu setBerkasobjek untuk diunggah

Impor

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.transfer.MultipleFileUpload; import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.TransferManagerBuilder; import com.amazonaws.services.s3.transfer.Upload; import java.io.File; import java.util.ArrayList; import java.util.Arrays;

Kode

ArrayList<File> files = new ArrayList<File>(); for (String path : file_paths) { files.add(new File(path)); } TransferManager xfer_mgr = TransferManagerBuilder.standard().build(); try { MultipleFileUpload xfer = xfer_mgr.uploadFileList(bucket_name, key_prefix, new File("."), files); // loop with Transfer.isDone() XferMgrProgress.showTransferProgress(xfer); // or block with Transfer.waitForCompletion() XferMgrProgress.waitForCompletion(xfer); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } xfer_mgr.shutdownNow();

LihatTunggu Transfer untuk Menyelesaikanuntuk informasi tentang menggunakanwaitForCompletionuntuk berhasil menyelesaikan transfer sebelum memanggil TransferManagershutdownNowmetode. Sambil menunggu transfer selesai, Anda dapat memilih atau mendengarkan pembaruan tentang status dan kemajuannya. LihatDapatkan Status Transfer dan Kemajuanuntuk informasi lebih lanjut.

ParameterMultipleFileUploadobjek yang dikembalikan olehuploadFileListdapat digunakan untuk query negara transfer atau kemajuan. LihatPoll Kemajuan Transfer Saat InidanDapatkan Transfer Progress dengan ProgressListeneruntuk informasi lebih lanjut.

Anda juga dapat menggunakanMultipleFileUpload'sgetSubTransfersmetode untuk mendapatkan individuUploadobjek untuk setiap file yang ditransfer. Untuk informasi selengkapnya, lihatDapatkan Kemajuan Subtransfer.

LihatLengkapi Contohdi GitHub.

Meng-unggah sebuah Direktori

Anda dapat menggunakan TransferManageruploadDirectorymetode untuk meng-upload seluruh direktori file, dengan pilihan untuk menyalin file dalam subdirektori rekursif. Anda menyediakanAmazon S3nama ember, key prefix S3, aBerkasobjek yang mewakili direktori lokal untuk menyalin, danbooleannilai yang menunjukkan apakah Anda ingin menyalin subdirektori secara rekursif (benarataupalsu).

Impor

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.transfer.MultipleFileUpload; import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.TransferManagerBuilder; import com.amazonaws.services.s3.transfer.Upload; import java.io.File; import java.util.ArrayList; import java.util.Arrays;

Kode

TransferManager xfer_mgr = TransferManagerBuilder.standard().build(); try { MultipleFileUpload xfer = xfer_mgr.uploadDirectory(bucket_name, key_prefix, new File(dir_path), recursive); // loop with Transfer.isDone() XferMgrProgress.showTransferProgress(xfer); // or block with Transfer.waitForCompletion() XferMgrProgress.waitForCompletion(xfer); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } xfer_mgr.shutdownNow();

LihatTunggu Transfer untuk Menyelesaikanuntuk informasi tentang menggunakanwaitForCompletionuntuk berhasil menyelesaikan transfer sebelum memanggil TransferManagershutdownNowmetode. Sambil menunggu transfer selesai, Anda dapat memilih atau mendengarkan pembaruan tentang status dan kemajuannya. LihatDapatkan Status Transfer dan Kemajuanuntuk informasi lebih lanjut.

ParameterMultipleFileUploadobjek yang dikembalikan olehuploadFileListdapat digunakan untuk query negara transfer atau kemajuan. LihatPoll Kemajuan Transfer Saat InidanDapatkan Transfer Progress dengan ProgressListeneruntuk informasi lebih lanjut.

Anda juga dapat menggunakanMultipleFileUpload'sgetSubTransfersmetode untuk mendapatkan individuUploadobjek untuk setiap file yang ditransfer. Untuk informasi selengkapnya, lihatDapatkan Kemajuan Subtransfer.

LihatLengkapi Contohdi GitHub.

Mengunduh File atau Direktori

Menggunakan TransferManager kelas untuk men-download salah satu file (Amazon S3objek) atau direktori (sebuahAmazon S3nama bucket diikuti oleh awalan objek) dariAmazon S3.

Mengunduh File Tunggal

Gunakan TransferManagerdownloadmetode, menyediakanAmazon S3nama bucket yang berisi objek yang ingin Anda download, kunci (objek) nama, danBerkasobjek yang mewakili file untuk membuat pada sistem lokal Anda.

Impor

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.transfer.Download; import com.amazonaws.services.s3.transfer.MultipleFileDownload; import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.TransferManagerBuilder; import java.io.File;

Kode

File f = new File(file_path); TransferManager xfer_mgr = TransferManagerBuilder.standard().build(); try { Download xfer = xfer_mgr.download(bucket_name, key_name, f); // loop with Transfer.isDone() XferMgrProgress.showTransferProgress(xfer); // or block with Transfer.waitForCompletion() XferMgrProgress.waitForCompletion(xfer); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } xfer_mgr.shutdownNow();

LihatTunggu Transfer untuk Menyelesaikanuntuk informasi tentang menggunakanwaitForCompletionuntuk berhasil menyelesaikan transfer sebelum memanggil TransferManagershutdownNowmetode. Sambil menunggu transfer selesai, Anda dapat memilih atau mendengarkan pembaruan tentang status dan kemajuannya. LihatDapatkan Status Transfer dan Kemajuanuntuk informasi lebih lanjut.

LihatLengkapi Contohdi GitHub.

Unduh Direktori

Untuk mengunduh satu set file yang berbagi key prefix umum (analog dengan direktori pada sistem file) dariAmazon S3, gunakan TransferManagerdownloadDirectorymetode. Metode ini mengambilAmazon S3nama bucket yang berisi objek yang ingin Anda download, awalan objek bersama oleh semua objek, danBerkasobjek yang mewakili direktori untuk men-download file ke dalam pada sistem lokal Anda. Jika direktori bernama belum ada, maka akan dibuat.

Impor

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.transfer.Download; import com.amazonaws.services.s3.transfer.MultipleFileDownload; import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.TransferManagerBuilder; import java.io.File;

Kode

TransferManager xfer_mgr = TransferManagerBuilder.standard().build(); try { MultipleFileDownload xfer = xfer_mgr.downloadDirectory( bucket_name, key_prefix, new File(dir_path)); // loop with Transfer.isDone() XferMgrProgress.showTransferProgress(xfer); // or block with Transfer.waitForCompletion() XferMgrProgress.waitForCompletion(xfer); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } xfer_mgr.shutdownNow();

LihatTunggu Transfer untuk Menyelesaikanuntuk informasi tentang menggunakanwaitForCompletionuntuk berhasil menyelesaikan transfer sebelum memanggil TransferManagershutdownNowmetode. Sambil menunggu transfer selesai, Anda dapat memilih atau mendengarkan pembaruan tentang status dan kemajuannya. LihatDapatkan Status Transfer dan Kemajuanuntuk informasi lebih lanjut.

LihatLengkapi Contohdi GitHub.

Salin Objek

Untuk menyalin objek dari satu bucket S3 ke yang lain, gunakan TransferManagercopymetode.

Impor

import com.amazonaws.AmazonServiceException; import com.amazonaws.services.s3.transfer.Copy; import com.amazonaws.services.s3.transfer.TransferManager; import com.amazonaws.services.s3.transfer.TransferManagerBuilder;

Kode

System.out.println("Copying s3 object: " + from_key); System.out.println(" from bucket: " + from_bucket); System.out.println(" to s3 object: " + to_key); System.out.println(" in bucket: " + to_bucket); TransferManager xfer_mgr = TransferManagerBuilder.standard().build(); try { Copy xfer = xfer_mgr.copy(from_bucket, from_key, to_bucket, to_key); // loop with Transfer.isDone() XferMgrProgress.showTransferProgress(xfer); // or block with Transfer.waitForCompletion() XferMgrProgress.waitForCompletion(xfer); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } xfer_mgr.shutdownNow();

LihatLengkapi Contohdi GitHub.

Tunggu Transfer untuk Menyelesaikan

Jika aplikasi Anda (atau thread) dapat memblokir sampai transfer selesai, Anda dapat menggunakantransferantarmukawaitForCompletionmetode untuk memblokir sampai transfer selesai atau pengecualian terjadi.

try { xfer.waitForCompletion(); } catch (AmazonServiceException e) { System.err.println("Amazon service error: " + e.getMessage()); System.exit(1); } catch (AmazonClientException e) { System.err.println("Amazon client error: " + e.getMessage()); System.exit(1); } catch (InterruptedException e) { System.err.println("Transfer interrupted: " + e.getMessage()); System.exit(1); }

Anda mendapatkan kemajuan transfer jika Anda memilih untuk acarasebelumnyapanggilanwaitForCompletion, menerapkan mekanisme pemungutan suara pada thread terpisah, atau menerima pembaruan kemajuan secara asinkron menggunakanProgressListener.

LihatLengkapi Contohdi GitHub.

Dapatkan Status Transfer dan Kemajuan

Masing-masing kelas yang dikembalikan oleh TransferManagerupload*,download*, dancopymetode mengembalikan sebuah contoh dari salah satu kelas berikut, tergantung pada apakah itu tunggal-file atau operasi multiple-file.

Kelas Dikembalikan oleh

Salin

copy

Unduh

download

MultipleFileDownload

downloadDirectory

Unggah

upload

MultipleFileUpload

uploadFileList, uploadDirectory

Semua kelas ini menerapkantransferantarmuka.Transfermenyediakan metode yang berguna untuk mendapatkan kemajuan transfer, jeda atau melanjutkan transfer, dan mendapatkan status transfer saat ini atau akhir.

Poll Kemajuan Transfer Saat Ini

Lingkaran ini mencetak kemajuan transfer, memeriksa kemajuan saat ini saat berjalan dan, ketika selesai, mencetak keadaan akhir.

Impor

import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; import com.amazonaws.event.ProgressEvent; import com.amazonaws.event.ProgressListener; import com.amazonaws.services.s3.transfer.*; import com.amazonaws.services.s3.transfer.Transfer.TransferState; import java.io.File; import java.util.ArrayList; import java.util.Collection;

Kode

// print the transfer's human-readable description System.out.println(xfer.getDescription()); // print an empty progress bar... printProgressBar(0.0); // update the progress bar while the xfer is ongoing. do { try { Thread.sleep(100); } catch (InterruptedException e) { return; } // Note: so_far and total aren't used, they're just for // documentation purposes. TransferProgress progress = xfer.getProgress(); long so_far = progress.getBytesTransferred(); long total = progress.getTotalBytesToTransfer(); double pct = progress.getPercentTransferred(); eraseProgressBar(); printProgressBar(pct); } while (xfer.isDone() == false); // print the final state of the transfer. TransferState xfer_state = xfer.getState(); System.out.println(": " + xfer_state);

LihatLengkapi Contohdi GitHub.

Dapatkan Transfer Progress dengan ProgressListener

Anda dapat melampirkanProgressListenerke transfer apa pun dengan menggunakantransferAntarmukaaddProgressListenermetode.

SEBUAHProgressListenerhanya membutuhkan satu metode,progressChanged, yang mengambilProgressEventobjek. Anda dapat menggunakan objek untuk mendapatkan total byte operasi dengan memanggil nyagetBytesmetode, dan jumlah byte ditransfer sejauh ini dengan memanggilgetBytesTransferred.

Impor

import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; import com.amazonaws.event.ProgressEvent; import com.amazonaws.event.ProgressListener; import com.amazonaws.services.s3.transfer.*; import com.amazonaws.services.s3.transfer.Transfer.TransferState; import java.io.File; import java.util.ArrayList; import java.util.Collection;

Kode

File f = new File(file_path); TransferManager xfer_mgr = TransferManagerBuilder.standard().build(); try { Upload u = xfer_mgr.upload(bucket_name, key_name, f); // print an empty progress bar... printProgressBar(0.0); u.addProgressListener(new ProgressListener() { public void progressChanged(ProgressEvent e) { double pct = e.getBytesTransferred() * 100.0 / e.getBytes(); eraseProgressBar(); printProgressBar(pct); } }); // block with Transfer.waitForCompletion() XferMgrProgress.waitForCompletion(u); // print the final state of the transfer. TransferState xfer_state = u.getState(); System.out.println(": " + xfer_state); } catch (AmazonServiceException e) { System.err.println(e.getErrorMessage()); System.exit(1); } xfer_mgr.shutdownNow();

LihatLengkapi Contohdi GitHub.

Dapatkan Kemajuan Subtransfer

ParameterMultipleFileUploadkelas dapat mengembalikan informasi tentang subtransfernya dengan memanggil nyagetSubTransfersmetode. Ia mengembalikan sebuah tidak dapat dimodifikasiKoleksidariUnggahobjek yang menyediakan status transfer individu dan kemajuan setiap sub-transfer.

Impor

import com.amazonaws.AmazonClientException; import com.amazonaws.AmazonServiceException; import com.amazonaws.event.ProgressEvent; import com.amazonaws.event.ProgressListener; import com.amazonaws.services.s3.transfer.*; import com.amazonaws.services.s3.transfer.Transfer.TransferState; import java.io.File; import java.util.ArrayList; import java.util.Collection;

Kode

Collection<? extends Upload> sub_xfers = new ArrayList<Upload>(); sub_xfers = multi_upload.getSubTransfers(); do { System.out.println("\nSubtransfer progress:\n"); for (Upload u : sub_xfers) { System.out.println(" " + u.getDescription()); if (u.isDone()) { TransferState xfer_state = u.getState(); System.out.println(" " + xfer_state); } else { TransferProgress progress = u.getProgress(); double pct = progress.getPercentTransferred(); printProgressBar(pct); System.out.println(); } } // wait a bit before the next update. try { Thread.sleep(200); } catch (InterruptedException e) { return; } } while (multi_upload.isDone() == false); // print the final state of the transfer. TransferState xfer_state = multi_upload.getState(); System.out.println("\nMultipleFileUpload " + xfer_state);

LihatLengkapi Contohdi GitHub.

Info Selengkapnya

  • Kunci objekdiAmazon Simple Storage ServicePanduan Pengguna