Suivi des progrès - AWS SDK pour PHP

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 sur true dans le $config tableau 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 SingleProgressTracker instance ou fournissez une implémentation personnalisée deAbstractTransferListener. Transmettez votre tracker aux opérations sur les fichiers en tant que $progressTracker paramè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 :

Sortie de console affichant une barre de progression pour le téléchargement du MyFile fichier .txt avec le pourcentage d'achèvement et la vitesse de transfert

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 true dans l'argument du $config tableau 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 MultiProgressTracker instance et transmettez-la aux opérations d'annuaire en tant que $progressTracker paramè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 :

Sortie de console affichant plusieurs barres de progression pour le téléchargement de plusieurs fichiers avec une barre de progression récapitulative en bas

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 AbstractTransferListener et en implémentant ProgressTrackerInterface<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 « = » :

Sortie de console affichant une barre de progression personnalisée utilisant des signes égaux d'une largeur de 100 caractères

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 entre ColoredTransferProgressBarFormat et PlainProgressBarFormat

<?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 « * » :

Sortie de console affichant une barre de progression noire simple à l'aide d'astérisques d'une largeur de 25 caractères

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é :

Sortie de console affichant un format de progression personnalisé basé sur un pourcentage indiquant le nom de l'objet et les octets transférés

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]"