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
trueim$configArray 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
SingleProgressTrackerInstanz oder stellen Sie eine benutzerdefinierte Implementierung von bereitAbstractTransferListener. Übergeben Sie Ihren Tracker als$progressTrackerParameter 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:
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'
trueim$configArray-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
MultiProgressTrackerInstanz 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:
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
AbstractTransferListenerund implementierenProgressTrackerInterface<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 „=“:
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
progressBarFormatStandardinstanz vonColoredTransferProgressBarFormatbisPlainProgressBarFormat
<?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 „*“:
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:
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]"