AWS SDK for Java 1.x telah memasuki mode pemeliharaan pada 31 Juli 2024, dan akan mencapai end-of-support
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.TransferManager
bisa 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 TransferManagerupload
metode, menyediakanAmazon S3nama bucket, kunci (objek) nama, dan Java standarBerkas
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();
Parameterupload
metode pengembalianlangsung, menyediakanUpload
objek yang akan digunakan untuk memeriksa status transfer atau menunggu sampai selesai.
LihatTunggu Transfer untuk Menyelesaikanuntuk informasi tentang menggunakanwaitForCompletion
untuk berhasil menyelesaikan transfer sebelum memanggil TransferManagershutdownNow
metode. Sambil menunggu transfer selesai, Anda dapat memilih atau mendengarkan pembaruan tentang status dan kemajuannya. LihatDapatkan Status Transfer dan Kemajuanuntuk informasi lebih lanjut.
LihatLengkapi Contoh
Unggah Daftar File
Untuk mengunggah beberapa file dalam satu operasi, panggil TransferManageruploadFileList
, memberikan hal berikut:
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 menggunakanwaitForCompletion
untuk berhasil menyelesaikan transfer sebelum memanggil TransferManagershutdownNow
metode. 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 olehuploadFileList
dapat digunakan untuk query negara transfer atau kemajuan. LihatPoll Kemajuan Transfer Saat InidanDapatkan Transfer Progress dengan ProgressListeneruntuk informasi lebih lanjut.
Anda juga dapat menggunakanMultipleFileUpload
'sgetSubTransfers
metode untuk mendapatkan individuUpload
objek untuk setiap file yang ditransfer. Untuk informasi selengkapnya, lihatDapatkan Kemajuan Subtransfer.
LihatLengkapi Contoh
Meng-unggah sebuah Direktori
Anda dapat menggunakan TransferManageruploadDirectory
metode untuk meng-upload seluruh direktori file, dengan pilihan untuk menyalin file dalam subdirektori rekursif. Anda menyediakanAmazon S3nama ember, key prefix S3, aBerkasboolean
nilai 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 menggunakanwaitForCompletion
untuk berhasil menyelesaikan transfer sebelum memanggil TransferManagershutdownNow
metode. 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 olehuploadFileList
dapat digunakan untuk query negara transfer atau kemajuan. LihatPoll Kemajuan Transfer Saat InidanDapatkan Transfer Progress dengan ProgressListeneruntuk informasi lebih lanjut.
Anda juga dapat menggunakanMultipleFileUpload
'sgetSubTransfers
metode untuk mendapatkan individuUpload
objek untuk setiap file yang ditransfer. Untuk informasi selengkapnya, lihatDapatkan Kemajuan Subtransfer.
LihatLengkapi Contoh
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 TransferManagerdownload
metode, menyediakanAmazon S3nama bucket yang berisi objek yang ingin Anda download, kunci (objek) nama, danBerkas
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 menggunakanwaitForCompletion
untuk berhasil menyelesaikan transfer sebelum memanggil TransferManagershutdownNow
metode. Sambil menunggu transfer selesai, Anda dapat memilih atau mendengarkan pembaruan tentang status dan kemajuannya. LihatDapatkan Status Transfer dan Kemajuanuntuk informasi lebih lanjut.
LihatLengkapi Contoh
Unduh Direktori
Untuk mengunduh satu set file yang berbagi key prefix umum (analog dengan direktori pada sistem file) dariAmazon S3, gunakan TransferManagerdownloadDirectory
metode. Metode ini mengambilAmazon S3nama bucket yang berisi objek yang ingin Anda download, awalan objek bersama oleh semua objek, danBerkas
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 menggunakanwaitForCompletion
untuk berhasil menyelesaikan transfer sebelum memanggil TransferManagershutdownNow
metode. Sambil menunggu transfer selesai, Anda dapat memilih atau mendengarkan pembaruan tentang status dan kemajuannya. LihatDapatkan Status Transfer dan Kemajuanuntuk informasi lebih lanjut.
LihatLengkapi Contoh
Salin Objek
Untuk menyalin objek dari satu bucket S3 ke yang lain, gunakan TransferManagercopy
metode.
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 Contoh
Tunggu Transfer untuk Menyelesaikan
Jika aplikasi Anda (atau thread) dapat memblokir sampai transfer selesai, Anda dapat menggunakantransferantarmukawaitForCompletion
metode 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 Contoh
Dapatkan Status Transfer dan Kemajuan
Masing-masing kelas yang dikembalikan oleh TransferManagerupload*
,download*
, dancopy
metode mengembalikan sebuah contoh dari salah satu kelas berikut, tergantung pada apakah itu tunggal-file atau operasi multiple-file.
Kelas | Dikembalikan oleh |
---|---|
|
|
|
|
|
|
|
|
|
Semua kelas ini menerapkantransferantarmuka.Transfer
menyediakan metode yang berguna untuk mendapatkan kemajuan transfer, jeda atau melanjutkan transfer, dan mendapatkan status transfer saat ini atau akhir.
Topik
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 Contoh
Dapatkan Transfer Progress dengan ProgressListener
Anda dapat melampirkanProgressListenerke transfer apa pun dengan menggunakantransferAntarmukaaddProgressListener
metode.
SEBUAHProgressListenerhanya membutuhkan satu metode,progressChanged
, yang mengambilProgressEventobjek. Anda dapat menggunakan objek untuk mendapatkan total byte operasi dengan memanggil nyagetBytes
metode, 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 Contoh
Dapatkan Kemajuan Subtransfer
ParameterMultipleFileUploadkelas dapat mengembalikan informasi tentang subtransfernya dengan memanggil nyagetSubTransfers
metode. Ia mengembalikan sebuah tidak dapat dimodifikasiKoleksi
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 Contoh
Info Selengkapnya
-
Kunci objekdiAmazon Simple Storage ServicePanduan Pengguna