Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.
Seguimiento del progreso
S3 Transfer Manager proporciona funciones integradas de seguimiento del progreso.
Seguimiento de todas las operaciones
Puede habilitar el seguimiento de todas las operaciones (archivos y directorios) track_progress configurándolo true en la S3TransferManager instancia.
<?php use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager( null, [ 'track_progress' => true, ] );
Con esta configuración, el SDK usa el integrado SingleProgressTracker <add link> para las operaciones con archivos y usa el MultiProgressTracker <add link>para las operaciones de directorio.
Rastrear una operación de un solo archivo
- Si no habilitaste el seguimiento del progreso en el administrador de transferencias, puedes habilitar el seguimiento en un método individual de dos maneras.
-
track_progresstrueConfigúrelo en la$configmatriz para una operación de archivo específica.<?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, ], [] ) ); - Cree una nueva
SingleProgressTrackerinstancia o proporcione una implementación personalizada deAbstractTransferListener. Pase su rastreador a las operaciones del archivo como$progressTrackerparámetro. -
<?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. ) );
En el siguiente ejemplo, se muestra un ejemplo del resultado de la consola integrada SingleProgressTracker para ver el progreso de la carga de un archivo denominadoMyFile.txt:
Seguimiento de una sola operación de directorio
Si no habilitaste el seguimiento del progreso en el administrador de transferencias, puedes habilitarlo para las operaciones de directorio de dos maneras.
- Establece 'track_progress'
trueen el argumento de$configmatriz del método. -
<?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 nueva
MultiProgressTrackerinstancia y pásala al directorio de operaciones como parámetro.$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() ) );
En el siguiente ejemplo, se muestra un ejemplo del resultado de la consola integrada MultiProgressTracker para el progreso de la carga de un directorio:
El progreso de cada archivo aparece junto con el progreso resumido en la última línea.
Seguimiento del progreso personalizado
Puede implementar su propio seguimiento del progreso de las operaciones con archivos. Crea una clase que amplíe la AbstractTransferListener interfaz y pásala al método de la solicitud.
La siguiente implementación muestra la información de progreso en formato de texto para una sola operación de archivo:
<?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() ) );
El siguiente ejemplo muestra un ejemplo de salida a la consola para la carga de archivos en curso:
Starting transfer of file.txt... Progress: 42% (16.8MB of 40MB)
Personalice un rastreador de progreso integrado
Puedes personalizar el seguimiento del progreso de varias maneras:
-
Cree una implementación personalizada ampliándola
AbstractTransferListenere implementándolaProgressTrackerInterface<add link>. -
Personalice las implementaciones existentes configurando las
ConsoleProgressBar<add link>que se transfieren a los rastreadores integrados. -
Implemente una personalización
ProgressBar<add link>y pásela a los rastreadores integrados.
Los siguientes ejemplos muestran cómo personalizar el seguimiento del progreso. Consulta el diagrama de clases para ver la relación entre los componentes del seguimiento del progreso del SDK.
Personaliza un ConsoleProgressBar
Personalice el formato de barra predeterminado
El siguiente ejemplo personaliza el formato predeterminado de la barra de progreso, que es ColoredTransferProgressBarFormat<add
link>. Este formato muestra el progreso con diferentes colores según el estado de la transferencia.
El ejemplo cambia:
-
el carácter del predeterminado «#» a «=»
-
ancho de barra: de 50 a 100 por defecto
<?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);
La siguiente imagen muestra la salida de consola de un dispositivo integrado personalizado ConsoleProgressBar con un ancho de 100 y un carácter de «=»:
Personalízala usando el formato de barra de progreso simple
En el siguiente ejemplo, se personaliza la barra de progreso predeterminada mediante la integrada PlainProgressBarFormat <add
link> con un carácter y un ancho personalizados. Solo se PlainProgressBarFormat muestra en negro. El color no cambia en función del estado de la transferencia.
El ejemplo cambia:
-
el carácter del predeterminado «#» a «*»
-
ancho de barra: de 50 a 25 por defecto
-
la
progressBarFormatinstancia predeterminada deColoredTransferProgressBarFormataPlainProgressBarFormat
<?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);
La siguiente imagen muestra la salida de consola de un dispositivo integrado personalizado ConsoleProgressBar con un formato de barra de progreso simple con un ancho de 25 y un carácter de «*»:
Personalízala creando un nuevo formato de barra
En el siguiente ejemplo, se personaliza la barra de progreso predeterminada mediante un nuevo formato de barra (extendido ProgressBarFormat<add
link>) en lugar de personalizar un formato integrado.
<?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);
La siguiente imagen muestra el resultado de la consola para un elemento integrado personalizado ConsoleProgressBar con un formato de barra de progreso personalizado:
Un formato de barra personalizado acepta varios parámetros:
-
object_name
-
porcentaje
-
barra de progreso
-
para ser transferido
-
transferida
-
unidad
Puede combinar los nombres de los parámetros delimitados (caracteres de barra vertical) para personalizar la salida. En el ejemplo se utiliza la siguiente plantilla. El getFormatTemplate método de la PercentBarFormat clase devuelve esta plantilla:
"|object_name| - |percent|% [|transferred| |unit|ytes]"