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.
Suivi des progrès
S3 Transfer Manager fournit des fonctionnalités intégrées de suivi de la progression.
Suivi de toutes les opérations
Vous pouvez activer le suivi pour toutes les opérations (fichier et répertoire) en configurant track_progress cette option true sur l'S3TransferManagerinstance.
<?php use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager( null, [ 'track_progress' => true, ] );
Avec ce paramètre, le SDK utilise le paramètre intégré SingleProgressTracker <add link> pour les opérations sur les fichiers et utilise le MultiProgressTracker <add link>pour les opérations de répertoire.
Suivi d'une opération sur un seul fichier
- Si vous n'avez pas activé le suivi de la progression dans le gestionnaire de transferts, vous pouvez activer le suivi selon une méthode individuelle de deux manières.
-
track_progressDéfini surtruedans le$configtableau pour une opération de fichier spécifique.<?php use Aws\S3\S3Transfer\Models\UploadDirectoryRequest; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager( null, [] ); $uploadDirPromise = $transferManager->uploadDirectory( new UploadDirectoryRequest( '/path/to/directory', 'amzn-s3-demo-bucket', [], [ // $config array 'track_progress' => true, ], [] ) ); - Créez une nouvelle
SingleProgressTrackerinstance ou fournissez une implémentation personnalisée deAbstractTransferListener. Transmettez votre tracker aux opérations sur les fichiers en tant que$progressTrackerparamètre. -
<?php use Aws\S3\S3Transfer\Models\UploadRequest; use Aws\S3\S3Transfer\Progress\SingleProgressTracker; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager( null, [] ); $uploadPromise = $transferManager->upload( new UploadRequest( '/path/to/Myfile.txt', // Or an instance of StreamInterface. [ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'file.txt', ], [], [], new SingleProgressTracker() // Or custom implementation of the TransferLister interface. ) );
L'exemple suivant montre un exemple de sortie de console depuis le module intégré SingleProgressTracker pour la progression du téléchargement d'un fichier nommé MyFile.txt :
Suivi d'une seule opération d'annuaire
Si vous n'avez pas activé le suivi de la progression dans le gestionnaire de transferts, vous pouvez l'activer pour les opérations d'annuaire de deux manières.
- Définissez « track_progress » sur
truedans l'argument du$configtableau de la méthode. -
<?php use Aws\S3\S3Transfer\Models\UploadDirectoryRequest; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager( null, [] ); $uploadDirPromise = $transferManager->uploadDirectory( new UploadDirectoryRequest( '/path/to/directory', 'amzn-s3-demo-bucket', [], [ // $config array 'track_progress' => true, ], [] ) ); - Créez une nouvelle
MultiProgressTrackerinstance et transmettez-la aux opérations d'annuaire en tant que$progressTrackerparamètre. -
<?php use Aws\S3\S3Transfer\Models\UploadDirectoryRequest; use Aws\S3\S3Transfer\Progress\MultiProgressTracker; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager( null, [] ); $uploadDirPromise = $transferManager->uploadDirectory( new UploadDirectoryRequest( '/path/to/directory', 'amzn-s3-demo-bucket', [], [], [], new MultiProgressTracker() ) );
L'exemple suivant montre un exemple de sortie de console depuis le module intégré MultiProgressTracker pour la progression du téléchargement d'un répertoire :
La progression de chaque fichier est répertoriée ainsi que le résumé de la progression dans la dernière ligne.
Suivi personnalisé de la progression
Vous pouvez implémenter votre propre suivi de progression pour les opérations sur les fichiers. Créez une classe qui étend l'AbstractTransferListenerinterface et transmettez-la à la méthode sur la demande.
L'implémentation suivante affiche les informations de progression au format texte pour une seule opération sur un fichier :
<?php use Aws\S3\S3Transfer\Models\UploadRequest; use Aws\S3\S3Transfer\Progress\AbstractTransferListener; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; class MyProgressTracker extends AbstractTransferListener { public function transferInitiated(array $context): void { $key = $context['request_args']['Key'] ?? 'unknown'; echo "Starting transfer of {$key}...\n"; } public function bytesTransferred(array $context): bool { $snapshot = $context['progress_snapshot']; $percent = round($snapshot->ratioTransferred() * 100, 2); $transferred = round($snapshot->getTransferredBytes() / 1024 / 1024, 2); $total = round($snapshot->getTotalBytes() / 1024 / 1024, 2); echo "Progress: {$percent}% ({$transferred}MB of {$total}MB)\n"; } public function transferComplete(array $context): void { $key = $context['request_args']['Key'] ?? 'unknown'; echo "Transfer complete for {$key}!\n"; } public function transferFail(array $context): void { $key = $context['request_args']['Key'] ?? 'unknown'; $reason = $context['reason']->getMessage(); echo "Transfer failed for {$key}: {$reason}\n"; } } $transferManager = new S3TransferManager( null, [] ); // Use your custom tracker. $uploadPromise = $transferManager->upload( new UploadRequest( '/path/to/file.txt', // Or an instance of StreamInterface. [ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'file.txt', ], [], [], new MyProgressTracker() ) );
L'exemple suivant montre un exemple de sortie vers la console pour le téléchargement de fichiers en cours :
Starting transfer of file.txt... Progress: 42% (16.8MB of 40MB)
Personnalisez un outil de suivi de progression intégré
Vous pouvez personnaliser le suivi de la progression de différentes manières :
-
Créez une implémentation personnalisée en étendant
AbstractTransferListeneret en implémentantProgressTrackerInterface<add link>. -
Personnalisez les implémentations existantes en configurant celles
ConsoleProgressBar<add link>qui sont transmises aux trackers intégrés. -
Implémentez une personnalisation
ProgressBar<add link>et transmettez-la aux trackers intégrés.
Les exemples suivants montrent comment personnaliser le suivi de la progression. Reportez-vous au diagramme de classes pour voir la relation entre les composants de suivi de la progression dans le SDK.
Personnalisez un ConsoleProgressBar
Personnaliser le format de barre par défaut
L'exemple suivant personnalise le format de barre de progression par défaut, qui est ColoredTransferProgressBarFormat<add
link>. Ce format affiche la progression avec différentes couleurs en fonction de l'état du transfert.
L'exemple change :
-
le caractère compris entre le « # » par défaut et le caractère « = »
-
largeur de barre comprise entre 50 et 100
<?php use Aws\S3\S3Client; use Aws\S3\S3Transfer\Models\UploadRequest; use Aws\S3\S3Transfer\Progress\ConsoleProgressBar; use Aws\S3\S3Transfer\Progress\SingleProgressTracker; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $progressBar = new ConsoleProgressBar( progressBarChar: '=', progressBarWidth: 100, // Default `ColoredTransferProgressBarFormat` is used. ); $progressTracker = new SingleProgressTracker( progressBar: $progressBar, ); $s3Client = new S3Client([ 'region' => 'us-east-2', ]); $s3TransferManager = new S3TransferManager($s3Client); $source = "/path/file.txt"; $result = $s3TransferManager->upload( new UploadRequest( source: $source, uploadRequestArgs: [ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'key', ], progressTracker: $progressTracker, ) )->wait(); print_r($result);
L'image suivante montre la sortie de console pour un module intégré personnalisé ConsoleProgressBar d'une largeur de 100 et d'un caractère « = » :
Personnalisez en utilisant le format de barre de progression simple
L'exemple suivant personnalise la barre de progression par défaut en utilisant la barre intégrée PlainProgressBarFormat <add
link> avec un caractère et une largeur personnalisés. Les PlainProgressBarFormat affichages sont uniquement en noir. La couleur ne change pas en fonction de l'état du transfert.
L'exemple change :
-
le caractère compris entre « # » et « * » par défaut
-
largeur de barre comprise entre 50 et 25
-
l'
progressBarFormatinstance par défaut comprise entreColoredTransferProgressBarFormatetPlainProgressBarFormat
<?php use Aws\S3\S3Client; use Aws\S3\S3Transfer\Models\UploadRequest; use Aws\S3\S3Transfer\Progress\ConsoleProgressBar; use Aws\S3\S3Transfer\Progress\PlainProgressBarFormat; use Aws\S3\S3Transfer\Progress\SingleProgressTracker; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $progressBar = new ConsoleProgressBar( progressBarChar: '*', progressBarWidth: 25, progressBarFormat: new PlainProgressBarFormat(), ); $progressTracker = new SingleProgressTracker( progressBar: $progressBar, ); $s3Client = new S3Client([ 'region' => 'us-east-2', ]); $s3TransferManager = new S3TransferManager($s3Client); $source = "/path/file.txt"; $result = $s3TransferManager->upload( new UploadRequest( source: $source, uploadRequestArgs: [ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'key', ], progressTracker: $progressTracker, ) )->wait(); print_r($result);
L'image suivante montre la sortie de console pour une version intégrée personnalisée ConsoleProgressBar utilisant un format de barre de progression simple d'une largeur de 25 et d'un caractère « * » :
Personnalisez en créant un nouveau format de barre
L'exemple suivant personnalise la barre de progression par défaut en utilisant un nouveau format de barre (extension ProgressBarFormat<add
link>) au lieu de personnaliser un format intégré.
<?php use Aws\S3\S3Client; use Aws\S3\S3Transfer\Models\UploadRequest; use Aws\S3\S3Transfer\Progress\ConsoleProgressBar; use Aws\S3\S3Transfer\Progress\ProgressBarFormat; use Aws\S3\S3Transfer\Progress\SingleProgressTracker; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; // Implement a custom bar format. class PercentBarFormat extends ProgressBarFormat { public const FORMAT_TEMPLATE = "|object_name| - |percent|% [|transferred| |unit|ytes]"; public const FORMAT_PARAMETERS = [ 'object_name', // `uploadRequestArgs` Key parameter. 'percent', // Percent transferred. // 'progress_bar', Optional, if used, default is a `ConsoleProgressBar`. // 'to_be_transferred', Optional. 'transferred', // Default is bytes transferred. 'unit', // Default is 'B'. ]; public function getFormatTemplate(): string { return self::FORMAT_TEMPLATE; } public function getFormatParameters(): array { return self::FORMAT_PARAMETERS; } protected function getFormatDefaultParameterValues(): array { return []; } } // Create an instance of the custom implemention $progressBarFormat = new PercentBarFormat(); $progressBar = new ConsoleProgressBar( progressBarFormat: $progressBarFormat, ); $progressTracker = new SingleProgressTracker( progressBar: $progressBar, ); $s3Client = new S3Client([ 'region' => 'us-east-2', ]); $s3TransferManager = new S3TransferManager($s3Client); $source = "/path/file"; $result = $s3TransferManager->upload( new UploadRequest( source: $source, uploadRequestArgs: [ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'key', ], progressTracker: $progressTracker, ) )->wait(); print_r($result);
L'image suivante montre la sortie de console pour une version intégrée personnalisée ConsoleProgressBar utilisant un format de barre de progression personnalisé :
Un format de barre personnalisé accepte plusieurs paramètres :
-
nom d’objet
-
pourcentage
-
barre de progression
-
à transférer
-
transférées
-
unité
Vous pouvez combiner les noms de paramètres délimités (caractères en forme de tube) pour personnaliser la sortie. L'exemple utilise le modèle suivant. La getFormatTemplate méthode de la PercentBarFormat classe renvoie ce modèle :
"|object_name| - |percent|% [|transferred| |unit|ytes]"