A l'aide de TransferManager pourAmazon S3Opérations - AWS SDK for Java 1. x

La AWS SDK for Java version 1.x est entrée en mode maintenance le 31 juillet 2024 et atteindra end-of-supportle 31 décembre 2025. Nous vous recommandons de migrer vers le pour continuer AWS SDK for Java 2.xà bénéficier des nouvelles fonctionnalités, des améliorations de disponibilité et des mises à jour de sécurité.

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 standardFichierqui représente le fichier à charger.

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 dewaitForCompletionpour effectuer un transfert avec succès avant d'appeler TransferManagershutdownNowMé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 sur GitHub.

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

  • Un objet List contenant un ensemble d'objets File à charger

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 dewaitForCompletionpour effectuer un transfert avec succès avant d'appeler TransferManagershutdownNowMé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 sur GitHub.

Charger un répertoire

Vous pouvez utiliser leuploadDirectorypour 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 File représentant le répertoire local à copier et une valeur boolean 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 dewaitForCompletionpour effectuer un transfert avec succès avant d'appeler TransferManagershutdownNowMé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 sur GitHub.

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 objetFichierqui représente le fichier à créer sur votre système local.

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 dewaitForCompletionpour effectuer un transfert avec succès avant d'appeler TransferManagershutdownNowMé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 sur GitHub.

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 TransferManagerdownloadDirectoryMé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 qui représente le répertoire de votre système local dans lequel télécharger les fichiers. Si le répertoire nommé n'existe pas encore, il est créé.

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 dewaitForCompletionpour effectuer un transfert avec succès avant d'appeler TransferManagershutdownNowMé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 sur GitHub.

Copie d'objets

Pour copier un objet depuis un compartiment S3 vers un autre, utilisez TransferManager.copyMé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 sur GitHub.

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'interfacewaitForCompletionpour 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 sur GitHub.

Obtention de l'état et de la progression du transfert

Chacune des classes renvoyées par le TransferManagerupload*,download*, etcopyrenvoie 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

Copy

copy

Download

download

MultipleFileDownload

downloadDirectory

Charger

upload

MultipleFileUpload

uploadFileList, uploadDirectory

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.

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 sur GitHub.

Obtention de la progression d'un transfert avec un ProgressListener

Vous pouvez attacher un objetProgressListenervers n'importe quel transfert à l'aide de latransfertl'interfaceaddProgressListenerMé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 sur GitHub.

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 modifiableCollectiondeChargerobjets qui fournissent l'état et la progression de chaque sous-transfert.

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 sur GitHub.

Plus d'informations

  • Clés d'objetdans leAmazon Simple Storage ServiceGuide de l'utilisateur