La AWS SDK for Java version 1.x est entrée en mode maintenance le 31 juillet 2024 et atteindra end-of-support
Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
A l'aide de TransferManager pourAmazon S3Opérations
Vous pouvez utiliser la classe TransferManager du kit AWS SDK for Java pour transférer des fichiers de manière fiable de l'environnement local vers Amazon S3 et pour copier des objets d'un emplacement S3 vers un autre. TransferManager
peut obtenir la progression d'un transfert, et suspendre ou reprendre les chargements et les téléchargements.
Note
Bonne pratique
Nous vous recommandons d'activer la règle de cycle de vie AbortIncompleteMultipartUpload sur vos compartiments Amazon S3.
Cette règle indique à Amazon S3 d'interrompre les chargements partitionnés qui ne sont pas terminés après un nombre de jours prédéfini à compter de leur lancement. Lorsque le délai défini est dépassé, Amazon S3 interrompt le chargement, puis supprime les données du chargement inachevé.
Pour de plus amples informations, veuillez consulterConfiguration du cycle de vie pour un compartiment avec gestion des versionsdans leAmazon S3Guide de l'utilisateur .
Note
Ces exemples de code supposent que vous comprenez le contenu deUtilisation deAWS SDK for Javaet ont configuré la valeur par défautAWSinformations d'identification utilisant les informations deConfigurationAWSInformations d'identification et région pour le développement.
Chargement des fichiers et des répertoires
TransferManager peut charger des fichiers, des listes de fichiers et des répertoires sur toutAmazon S3seaux que vous avezprécédemment créée.
Chargement d'un seul fichier
Appelez TransferManager'supload
, fournissant une méthodeAmazon S3Nom du compartiment, nom de clé (objet) et Java standardFichier
Importations
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;
Code
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();
La méthode upload
renvoie immédiatement un résultat, en fournissant un objet Upload
à utiliser pour vérifier l'état du transfert ou attendre qu'il se termine.
VoirAttente de la fin d'un transfertInformations supplémentaires sur l'utilisation dewaitForCompletion
pour effectuer un transfert avec succès avant d'appeler TransferManagershutdownNow
Méthode. En attendant que le transfert se termine, vous pouvez interroger ou écouter les mises à jour relatives à son état et à sa progression. Pour plus d'informations, consultez Obtention de l'état et de la progression du transfert.
Veuillez consulter l'exemple complet
Chargement d'une liste de fichiers
Pour charger plusieurs fichiers en une seule opération, appelez le TransferManager.uploadFileList
, en fournissant les éléments suivants :
-
Un nom de compartiment Amazon S3
-
Un préfixe de clé à ajouter devant les noms des objets créés (le chemin au sein du compartiment dans lequel placer les objets)
-
Un objet File
qui représente le répertoire relatif à partir duquel créer les chemins de fichier
Importations
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;
Code
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();
VoirAttente de la fin d'un transfertInformations supplémentaires sur l'utilisation dewaitForCompletion
pour effectuer un transfert avec succès avant d'appeler TransferManagershutdownNow
Méthode. En attendant que le transfert se termine, vous pouvez interroger ou écouter les mises à jour relatives à son état et à sa progression. Pour plus d'informations, consultez Obtention de l'état et de la progression du transfert.
L'objet MultipleFileUpload renvoyé par uploadFileList
peut être utilisé pour interroger l'état ou la progression du transfert. Pour plus d'informations, consultez Interrogation de la progression en cours d'un transfert et Obtention de la progression d'un transfert avec un ProgressListener.
Vous pouvez aussi utiliser la méthode MultipleFileUpload
de getSubTransfers
pour obtenir les objets Upload
individuels de chaque fichier transféré. Pour plus d'informations, consultez Obtention de la progression des sous-transferts.
Veuillez consulter l'exemple complet
Charger un répertoire
Vous pouvez utiliser leuploadDirectory
pour charger l'intégralité d'un répertoire de fichiers, avec la possibilité de copier les fichiers dans les sous-répertoires de façon récursive. Vous fournissez un nom de compartiment Amazon S3, un préfixe de clé S3, un objet Fileboolean
indiquant si vous souhaitez copier les sous-répertoires de façon récursive (true ou false).
Importations
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;
Code
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();
VoirAttente de la fin d'un transfertInformations supplémentaires sur l'utilisation dewaitForCompletion
pour effectuer un transfert avec succès avant d'appeler TransferManagershutdownNow
Méthode. En attendant que le transfert se termine, vous pouvez interroger ou écouter les mises à jour relatives à son état et à sa progression. Pour plus d'informations, consultez Obtention de l'état et de la progression du transfert.
L'objet MultipleFileUpload renvoyé par uploadFileList
peut être utilisé pour interroger l'état ou la progression du transfert. Pour plus d'informations, consultez Interrogation de la progression en cours d'un transfert et Obtention de la progression d'un transfert avec un ProgressListener.
Vous pouvez aussi utiliser la méthode MultipleFileUpload
de getSubTransfers
pour obtenir les objets Upload
individuels de chaque fichier transféré. Pour plus d'informations, consultez Obtention de la progression des sous-transferts.
Veuillez consulter l'exemple complet
Téléchargement de fichiers ou de répertoires
Utilisation de l' TransferManager pour télécharger un seul fichier (Amazon S3objet) ou un répertoire (unAmazon S3nom de compartiment suivi d'un préfixe d'objet) depuisAmazon S3.
Téléchargement d'un seul fichier
Utilisez le gestionnaire de transfertdownload
, fournissant la méthodeAmazon S3Nom du compartiment contenant l'objet que vous souhaitez télécharger, le nom de clé (objet) et un objetFichier
Importations
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;
Code
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();
VoirAttente de la fin d'un transfertInformations supplémentaires sur l'utilisation dewaitForCompletion
pour effectuer un transfert avec succès avant d'appeler TransferManagershutdownNow
Méthode. En attendant que le transfert se termine, vous pouvez interroger ou écouter les mises à jour relatives à son état et à sa progression. Pour plus d'informations, consultez Obtention de l'état et de la progression du transfert.
Veuillez consulter l'exemple complet
Téléchargement d'un répertoire
Pour télécharger un ensemble de fichiers qui partagent un key prefix (analogue à un répertoire sur un système de fichiers) depuisAmazon S3, utilisez le TransferManagerdownloadDirectory
Méthode. Cette méthode accepte le nom du compartiment Amazon S3 contenant les objets que vous voulez télécharger, le préfixe d'objet partagé par tous les objets et un objet File
Importations
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;
Code
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();
VoirAttente de la fin d'un transfertInformations supplémentaires sur l'utilisation dewaitForCompletion
pour effectuer un transfert avec succès avant d'appeler TransferManagershutdownNow
Méthode. En attendant que le transfert se termine, vous pouvez interroger ou écouter les mises à jour relatives à son état et à sa progression. Pour plus d'informations, consultez Obtention de l'état et de la progression du transfert.
Veuillez consulter l'exemple complet
Copie d'objets
Pour copier un objet depuis un compartiment S3 vers un autre, utilisez TransferManager.copy
Méthode.
Importations
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;
Code
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();
Veuillez consulter l'exemple complet
Attente de la fin d'un transfert
Si votre application (ou thread) peut être bloquée jusqu'à ce que le transfert soit terminé, vous pouvez utiliser latransfertl'interfacewaitForCompletion
pour bloquer jusqu'à ce que le transfert soit terminé ou qu'une exception se produise.
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); }
Vous obtenez la progression des transferts si vous interrogez les événements avant l'appel de waitForCompletion
, implémentez un mécanisme d'interrogation sur un thread distinct ou recevez les mises à jour de la progression de manière asynchrone en utilisant un ProgressListener.
Veuillez consulter l'exemple complet
Obtention de l'état et de la progression du transfert
Chacune des classes renvoyées par le TransferManagerupload*
,download*
, etcopy
renvoie une instance d'une des classes suivantes, selon qu'il s'agit d'une opération sur un fichier unique ou sur plusieurs fichiers.
Classe | Renvoyée par |
---|---|
|
|
|
|
|
|
|
|
|
Toutes ces classes implémentent l'interface Transfer. Transfer
fournit des méthodes utiles pour obtenir la progression d'un transfert, suspendre ou reprendre le transfert, et obtenir l'état actuel ou final du transfert.
Rubriques
Interrogation de la progression en cours d'un transfert
Cette boucle imprime la progression d'un transfert, examine sa progression en cours lors de l'exécution et, une fois le transfert terminé, imprime son état final.
Importations
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;
Code
// 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);
Veuillez consulter l'exemple complet
Obtention de la progression d'un transfert avec un ProgressListener
Vous pouvez attacher un objetProgressListenervers n'importe quel transfert à l'aide de latransfertl'interfaceaddProgressListener
Méthode.
Un ProgressListener nécessite une seule méthode, progressChanged
, qui accepte un objet ProgressEvent. Vous pouvez utiliser l'objet pour obtenir le nombre total d'octets de l'opération en appelant sa méthode getBytes
, ainsi que le nombre d'octets transférés jusqu'à présent en appelant getBytesTransferred
.
Importations
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;
Code
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();
Veuillez consulter l'exemple complet
Obtention de la progression des sous-transferts
La classe MultipleFileUpload peut renvoyer des informations sur ses sous-transferts en appelant sa méthode getSubTransfers
. Elle renvoie un objet non modifiableCollection
Importations
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;
Code
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);
Veuillez consulter l'exemple complet
Plus d'informations
-
Clés d'objetdans leAmazon Simple Storage ServiceGuide de l'utilisateur