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 sutruenell'$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
SingleProgressTrackeristanza o fornisci un'implementazione personalizzata diAbstractTransferListener. Passa il tracker alle operazioni sul file come$progressTrackerparametro. -
<?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:
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
truenell'argomento dell'array del$configmetodo. -
<?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
MultiProgressTrackeristanza 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:
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
AbstractTransferListenere implementandoProgressTrackerInterface<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 «=»:
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 daColoredTransferProgressBarFormataPlainProgressBarFormat
<?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 «*»:
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:
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]"