翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
進行状況の追跡
S3 Transfer Manager には、進行状況の追跡機能が組み込まれています。
すべてのオペレーションの追跡
S3TransferManager インスタンスで track_progressを に設定することで、すべてのオペレーション (ファイルとディレクトリ) true の追跡を有効にできます。
<?php use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager( null, [ 'track_progress' => true, ] );
この設定では、SDK はファイルオペレーションに組み込みの SingleProgressTracker<add link> を使用し、ディレクトリオペレーションに MultiProgressTracker<add link> を使用します。
単一のファイルオペレーションの追跡
- 転送マネージャーで進行状況の追跡を有効にしなかった場合は、2 つの方法で個々の方法の追跡を有効にできます。
-
特定のファイルオペレーションの
$config配列trueで をtrack_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, ], [] ) ); - 新しい
SingleProgressTrackerインスタンスを作成するか、 のカスタム実装を提供しますAbstractTransferListener。トラッカーを$progressTrackerパラメータとしてファイルオペレーションに渡します。 -
<?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. ) );
次の例は、 という名前のファイルのアップロードの進行状況SingleProgressTrackerに関する組み込み からのサンプルコンソール出力を示していますMyFile.txt。
単一のディレクトリオペレーションの追跡
Transfer Manager で進行状況の追跡を有効にしなかった場合は、2 つの方法でディレクトリオペレーションで有効にできます。
- メソッドの
$config配列引数trueで「track_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, ], [] ) ); - 新しい
MultiProgressTrackerインスタンスを作成し、$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() ) );
次の例は、 ディレクトリのアップロードの進行状況MultiProgressTrackerに関する組み込み からのサンプルコンソール出力を示しています。
各ファイルの進行状況は、最後の行に進行状況の概要とともに一覧表示されます。
カスタム進行状況の追跡
ファイルオペレーションの独自の進行状況追跡を実装できます。AbstractTransferListener インターフェイスを拡張するクラスを作成し、リクエスト時に メソッドに渡します。
次の実装では、1 つのファイルオペレーションの進行状況をテキスト形式で表示します。
<?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() ) );
次の例は、進行中のファイルアップロードのコンソールへの出力例を示しています。
Starting transfer of file.txt... Progress: 42% (16.8MB of 40MB)
組み込みの進行状況トラッカーをカスタマイズする
進行状況の追跡は、いくつかの方法でカスタマイズできます。
-
ProgressTrackerInterface<add link>を拡張AbstractTransferListenerして実装することで、カスタム実装を作成します。 -
組み込みトラッカーに渡される
ConsoleProgressBar<add link>を設定して、既存の実装をカスタマイズします。 -
カスタム
ProgressBar<リンクを追加>を実装し、組み込みトラッカーに渡します。
次の例は、進行状況の追跡をカスタマイズする方法を示しています。SDK の進行状況追跡コンポーネント間の関係を確認するには、 クラス図を参照してください。
をカスタマイズする ConsoleProgressBar
デフォルトのバー形式をカスタマイズする
次の例では、<ColoredTransferProgressBarFormatadd link> というデフォルトの進行状況バー形式をカスタマイズします。この形式は、転送状態に応じて異なる色の進行状況を示します。
この例では次のように変更されています。
-
デフォルトの「#」から「"」までの文字
-
デフォルトの 50~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);
次の図は、幅が 100 ConsoleProgressBarで文字が "" のカスタマイズされた組み込みのコンソール出力を示しています。
プレーンプログレスバー形式を使用してカスタマイズする
次の例では、組み込みの PlainProgressBarFormat<add link> をカスタム文字と幅で使用して、デフォルトの進行状況バーをカスタマイズします。は黒でのみPlainProgressBarFormat表示されます。色は転送状態に基づいて変化しません。
この例では次のように変更されています。
-
デフォルトの「#」から「*」までの文字
-
デフォルトの 50~25 のバー幅
-
から
ColoredTransferProgressBarFormatへのデフォルトprogressBarFormatインスタンス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);
次の図は、幅が 25、文字が「*」のプレーンプログレスバー形式ConsoleProgressBarを使用して、カスタマイズされた組み込みのコンソール出力を示しています。
新しいバー形式を作成してカスタマイズする
次の例では、組み込み形式をカスタマイズする代わりに、新しいバー形式 (拡張 ProgressBarFormat<リンクの追加>) を使用してデフォルトの進行状況バーをカスタマイズします。
<?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);
次の図は、カスタム進行状況バー形式ConsoleProgressBarを使用してカスタマイズされた組み込みのコンソール出力を示しています。
カスタムバー形式は、いくつかのパラメータを受け入れます。
-
object_name
-
パーセント
-
progress_bar
-
to_be_transferred
-
転送済み
-
単位
区切り (パイプ文字) パラメータ名を組み合わせて、出力をカスタマイズできます。この例では、次のテンプレートを使用します。クラスの getFormatTemplateメソッドは、このテンプレートPercentBarFormatを返します。
"|object_name| - |percent|% [|transferred| |unit|ytes]"