Nachverfolgung des Fortschritts - AWS SDK für PHP

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Nachverfolgung des Fortschritts

S3 Transfer Manager bietet integrierte Funktionen zur Fortschrittsverfolgung.

Verfolgung aller Operationen

Sie können die Nachverfolgung für alle Operationen (Datei und Verzeichnis) aktivieren, indem Sie track_progress true auf der S3TransferManager Instanz auf einstellen.

<?php use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager( null, [ 'track_progress' => true, ] );

Mit dieser Einstellung verwendet das SDK die integrierten Funktionen SingleProgressTracker <add link> für Dateioperationen und MultiProgressTracker <add link>für Verzeichnisoperationen.

Verfolgung eines einzelnen Dateivorgangs

Wenn Sie die Fortschrittsverfolgung im Transfer Manager nicht aktiviert haben, können Sie die Verfolgung für eine einzelne Methode auf zwei Arten aktivieren.

Wird true im $config Array für einen bestimmten Dateivorgang auf eingestellttrack_progress.

<?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, ], [] ) );
Erstellen Sie eine neue SingleProgressTracker Instanz oder stellen Sie eine benutzerdefinierte Implementierung von bereitAbstractTransferListener. Übergeben Sie Ihren Tracker als $progressTracker Parameter an die Dateioperationen.
<?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. ) );

Das folgende Beispiel zeigt eine Beispielausgabe der integrierten Konsole SingleProgressTracker für den Upload-Fortschritt einer Datei mit dem NamenMyFile.txt:

Die Konsolenausgabe zeigt einen Fortschrittsbalken für das Hochladen von MyFile TXT-Dateien mit Angabe des Prozentsatzes der Fertigstellung und der Übertragungsgeschwindigkeit

Verfolgung eines einzelnen Verzeichnisvorgangs

Wenn Sie die Fortschrittsverfolgung im Transfer Manager nicht aktiviert haben, können Sie sie auf zwei Arten für Verzeichnisoperationen aktivieren.

Setzen Sie 'track_progress' true im $config Array-Argument der Methode auf.
<?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, ], [] ) );
Erstellen Sie eine neue MultiProgressTracker Instanz und übergeben Sie sie als Parameter an die Verzeichnisoperationen. $progressTracker
<?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() ) );

Das folgende Beispiel zeigt eine Beispielausgabe der integrierten Konsole MultiProgressTracker für den Upload-Fortschritt eines Verzeichnisses:

Die Konsolenausgabe zeigt mehrere Fortschrittsbalken für das Hochladen mehrerer Dateien mit einer Zusammenfassung des Fortschrittsbalkens am unteren Rand

Der Fortschritt jeder Datei wird zusammen mit der Zusammenfassung des Fortschritts in der letzten Zeile aufgeführt.

Benutzerdefinierte Fortschrittsverfolgung

Sie können Ihre eigene Fortschrittsverfolgung für Dateioperationen implementieren. Erstellen Sie eine Klasse, die die AbstractTransferListener Schnittstelle erweitert, und übergeben Sie sie an die Methode in der Anfrage.

Die folgende Implementierung zeigt Fortschrittsinformationen im Textformat für einen einzelnen Dateivorgang an:

<?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() ) );

Das folgende Beispiel zeigt eine Beispielausgabe an die Konsole für einen laufenden Datei-Upload:

Starting transfer of file.txt... Progress: 42% (16.8MB of 40MB)

Passen Sie einen integrierten Fortschritts-Tracker an

Sie können die Fortschrittsverfolgung auf verschiedene Arten anpassen:

  • Erstellen Sie eine benutzerdefinierte Implementierung, indem Sie sie erweitern AbstractTransferListener und implementieren ProgressTrackerInterface<add link>.

  • Passen Sie die vorhandenen Implementierungen an, indem Sie ConsoleProgressBar <add link> das konfigurieren, was an die integrierten Tracker übergeben wird.

  • Implementieren Sie einen benutzerdefinierten ProgressBar <add link> Wert und übergeben Sie ihn an die integrierten Tracker.

Die folgenden Beispiele zeigen, wie Sie die Fortschrittsverfolgung anpassen können. Das Klassendiagramm zeigt die Beziehung zwischen den Komponenten zur Fortschrittsverfolgung im SDK.

Passen Sie eine an ConsoleProgressBar

Passen Sie das Standardbalkenformat an

Im folgenden Beispiel wird das Standardformat für Fortschrittsbalken angepasst, das ist ColoredTransferProgressBarFormat<add link>. Dieses Format zeigt den Fortschritt je nach Übertragungsstatus in unterschiedlichen Farben an.

Das Beispiel ändert sich:

  • das Zeichen von der Standardeinstellung „#“ zu „=“

  • Balkenbreite von der Standardeinstellung 50 bis 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);

Die folgende Abbildung zeigt die Konsolenausgabe für ein benutzerdefiniertes integriertes Modul ConsoleProgressBar mit einer Breite von 100 und dem Zeichen „=“:

Die Konsolenausgabe zeigt einen benutzerdefinierten Fortschrittsbalken mit Gleichheitszeichen und einer Breite von 100 Zeichen

Passen Sie es an, indem Sie das einfache Fortschrittsbalkenformat verwenden

Im folgenden Beispiel wird der standardmäßige Fortschrittsbalken mithilfe der integrierten Anzeige PlainProgressBarFormat <add link> mit einem benutzerdefinierten Zeichen und einer benutzerdefinierten Breite angepasst. Die PlainProgressBarFormat Displays sind nur schwarz. Die Farbe ändert sich nicht je nach Übertragungsstatus.

Das Beispiel ändert sich:

  • das Zeichen von der Standardeinstellung „#“ zu „*“

  • Balkenbreite von der Standardeinstellung 50 bis 25

  • die progressBarFormat Standardinstanz von ColoredTransferProgressBarFormat bis 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);

Die folgende Abbildung zeigt die Konsolenausgabe für ein benutzerdefiniertes integriertes System ConsoleProgressBar mit einem einfachen Fortschrittsbalkenformat mit einer Breite von 25 und dem Zeichen „*“:

Die Konsolenausgabe zeigt einen einfachen schwarzen Fortschrittsbalken mit Sternchen mit einer Breite von 25 Zeichen

Passen Sie es an, indem Sie ein neues Balkenformat erstellen

Im folgenden Beispiel wird der standardmäßige Fortschrittsbalken angepasst, indem ein neues Balkenformat (Erweiterung ProgressBarFormat<add link>) verwendet wird, anstatt ein integriertes Format anzupassen.

<?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);

Die folgende Abbildung zeigt die Konsolenausgabe für ein benutzerdefiniertes integriertes System ConsoleProgressBar mit einem benutzerdefinierten Fortschrittsbalkenformat:

Die Konsolenausgabe zeigt ein benutzerdefiniertes prozentuales Fortschrittsformat, in dem der Objektname und die übertragenen Byte angezeigt werden

Ein benutzerdefiniertes Balkenformat akzeptiert mehrere Parameter:

  • object_name

  • Prozent

  • progress_bar

  • to_be_transferiert werden

  • übertragen

  • Einheit

Sie können die durch Trennzeichen (Pipe-Zeichen) getrennten Parameternamen kombinieren, um die Ausgabe anzupassen. In dem Beispiel wird die folgende Vorlage verwendet. Die getFormatTemplate Methode der PercentBarFormat Klasse gibt diese Vorlage zurück:

"|object_name| - |percent|% [|transferred| |unit|ytes]"