Monitoraggio dei progressi - AWS SDK per PHP

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Monitoraggio dei progressi

S3 Transfer Manager offre funzionalità integrate di tracciamento dei progressi.

Monitoraggio di tutte le operazioni

È possibile abilitare il tracciamento per tutte le operazioni (file e directory) track_progress impostando true su sull'S3TransferManageristanza.

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

Con questa impostazione, l'SDK utilizza il componente integrato SingleProgressTracker <add link> per le operazioni sui file e lo utilizza MultiProgressTracker <add link>per le operazioni sulle directory.

Monitoraggio di un'operazione su un singolo file

Se non hai abilitato il monitoraggio dei progressi nel gestore dei trasferimenti, puoi abilitare il tracciamento su un singolo metodo in due modi.

track_progressImpostato su true nell'$configarray per un'operazione specifica sui file.

<?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, ], [] ) );
Crea una nuova SingleProgressTracker istanza o fornisci un'implementazione personalizzata diAbstractTransferListener. Passa il tracker alle operazioni sul file come $progressTracker parametro.
<?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'esempio seguente mostra un esempio di output della console integrato SingleProgressTracker per l'avanzamento del caricamento di un file denominatoMyFile.txt:

Output della console che mostra una barra di avanzamento per il caricamento del MyFile file.txt con percentuale di completamento e velocità di trasferimento

Monitoraggio delle operazioni su una singola directory

Se non è stato abilitato il monitoraggio dell'avanzamento sul gestore di trasferimento, è possibile abilitarlo per le operazioni sulle directory in due modi.

Imposta 'track_progress' su true nell'argomento dell'array del $config metodo.
<?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, ], [] ) );
Crea una nuova MultiProgressTracker istanza e passala alle operazioni di directory come parametro. $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() ) );

L'esempio seguente mostra un esempio di output della console integrato MultiProgressTracker per l'avanzamento del caricamento di una directory:

Output della console che mostra più barre di avanzamento per il caricamento di più file con una barra di avanzamento riassuntiva nella parte inferiore

L'avanzamento di ogni file è elencato insieme al riepilogo dell'avanzamento nell'ultima riga.

Monitoraggio personalizzato dei progressi

È possibile implementare il proprio monitoraggio dei progressi per le operazioni sui file. Create una classe che estenda l'AbstractTransferListenerinterfaccia e passatela al metodo sulla richiesta.

L'implementazione seguente mostra le informazioni sullo stato di avanzamento in formato testo per un'operazione su un singolo file:

<?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'esempio seguente mostra un esempio di output sulla console per il caricamento di file in corso:

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

Personalizza un tracker di avanzamento integrato

Puoi personalizzare il monitoraggio dei progressi in diversi modi:

  • Crea un'implementazione personalizzata estendendo AbstractTransferListener e implementando ProgressTrackerInterface<add link>.

  • Personalizza le implementazioni esistenti configurando quelle ConsoleProgressBar <add link> che vengono passate ai tracker integrati.

  • Implementa una personalizzazione ProgressBar <add link> e passala ai tracker integrati.

Gli esempi seguenti mostrano come personalizzare il monitoraggio dei progressi. Fate riferimento al diagramma delle classi per vedere la relazione tra i componenti di monitoraggio dell'avanzamento nell'SDK.

Personalizza un ConsoleProgressBar

Personalizza il formato a barre predefinito

L'esempio seguente personalizza il formato predefinito della barra di avanzamento, ovvero ColoredTransferProgressBarFormat<add link>. Questo formato mostra l'avanzamento con colori diversi a seconda dello stato di trasferimento.

L'esempio cambia:

  • il carattere dal valore predefinito «#» a «=»

  • larghezza della barra dal valore predefinito di 50 a 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'immagine seguente mostra l'output della console per un dispositivo integrato personalizzato ConsoleProgressBar con una larghezza di 100 e il carattere «=»:

L'output della console mostra una barra di avanzamento personalizzata con segni di uguale con una larghezza di 100 caratteri

Personalizza utilizzando il semplice formato della barra di avanzamento

L'esempio seguente personalizza la barra di avanzamento predefinita utilizzando quella integrata PlainProgressBarFormat <add link> con un carattere e una larghezza personalizzati. I PlainProgressBarFormat display sono solo in nero. Il colore non cambia in base allo stato di trasferimento.

L'esempio cambia:

  • il carattere dal valore predefinito «#» a «*»

  • larghezza della barra dal valore predefinito di 50 a 25

  • l'progressBarFormatistanza predefinita da ColoredTransferProgressBarFormat a 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'immagine seguente mostra l'output della console per un sistema integrato personalizzato che ConsoleProgressBar utilizza un semplice formato a barra di avanzamento con una larghezza di 25 e un carattere «*»:

L'output della console mostra una semplice barra di avanzamento nera con asterischi con una larghezza di 25 caratteri

Personalizza creando un nuovo formato di barra

L'esempio seguente personalizza la barra di avanzamento predefinita utilizzando un nuovo formato di barra (estensibile ProgressBarFormat<add link>) anziché personalizzare un formato integrato.

<?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'immagine seguente mostra l'output della console per un dispositivo integrato personalizzato ConsoleProgressBar utilizzando un formato di barra di avanzamento personalizzato:

L'output della console mostra un formato di avanzamento personalizzato basato su percentuali che mostra il nome dell'oggetto e i byte trasferiti

Un formato di barra personalizzato accetta diversi parametri:

  • object_name

  • percentuale

  • barra di avanzamento

  • da_essere trasferito

  • trasferito

  • unità

È possibile combinare i nomi dei parametri delimitati (caratteri pipe) per personalizzare l'output. L'esempio utilizza il modello seguente. Il getFormatTemplate metodo della PercentBarFormat classe restituisce questo modello:

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