Pelacakan kemajuan - AWS SDK untuk PHP

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Pelacakan kemajuan

S3 Transfer Manager menyediakan kemampuan pelacakan kemajuan bawaan.

Melacak semua operasi

Anda dapat mengaktifkan pelacakan untuk semua operasi (file dan direktori) dengan menyetel track_progress ke true pada S3TransferManager instance.

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

Dengan pengaturan ini, SDK menggunakan built-in SingleProgressTracker <add link> untuk operasi file dan menggunakan <add link>operasi direktori MultiProgressTracker for.

Melacak operasi file tunggal

Jika Anda tidak mengaktifkan pelacakan kemajuan pada manajer transfer, Anda dapat mengaktifkan pelacakan pada metode individual dengan dua cara.

Setel track_progress ke true dalam $config array untuk operasi file tertentu.

<?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, ], [] ) );
Buat SingleProgressTracker instance baru atau berikan implementasi kustomAbstractTransferListener. Lewatkan pelacak Anda ke operasi file sebagai $progressTracker parameter.
<?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. ) );

Contoh berikut menunjukkan contoh keluaran konsol dari bawaan SingleProgressTracker untuk kemajuan unggahan file bernamaMyFile.txt:

Output konsol menunjukkan bilah kemajuan untuk MyFile mengunggah.txt dengan persentase lengkap dan kecepatan transfer

Melacak operasi direktori tunggal

Jika Anda tidak mengaktifkan pelacakan kemajuan pada manajer transfer, Anda dapat mengaktifkannya untuk operasi direktori dengan dua cara.

Setel 'track_progress' ke true dalam argumen array metode. $config
<?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, ], [] ) );
Buat MultiProgressTracker instance baru dan teruskan ke operasi direktori sebagai $progressTracker parameter.
<?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() ) );

Contoh berikut menunjukkan contoh keluaran konsol dari built-in MultiProgressTracker untuk kemajuan upload direktori:

Output konsol menampilkan beberapa bilah kemajuan untuk mengunggah banyak file dengan bilah kemajuan ringkasan di bagian bawah

Kemajuan setiap file terdaftar bersama dengan kemajuan ringkasan di baris terakhir.

Pelacakan kemajuan khusus

Anda dapat menerapkan pelacakan kemajuan Anda sendiri untuk operasi file. Buat kelas yang memperluas AbstractTransferListener antarmuka dan meneruskannya ke metode pada permintaan.

Implementasi berikut menampilkan informasi kemajuan dalam format teks untuk operasi file tunggal:

<?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() ) );

Contoh berikut menunjukkan contoh output ke konsol untuk upload file yang sedang berlangsung:

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

Sesuaikan pelacak kemajuan bawaan

Anda dapat menyesuaikan pelacakan kemajuan dengan beberapa cara:

  • Buat implementasi kustom dengan memperluas AbstractTransferListener dan mengimplementasikan ProgressTrackerInterface<add link>.

  • Sesuaikan implementasi yang ada dengan mengonfigurasi ConsoleProgressBar <add link> yang diteruskan ke pelacak bawaan.

  • Menerapkan kustom ProgressBar <add link> dan meneruskannya ke pelacak bawaan.

Contoh berikut menunjukkan cara menyesuaikan pelacakan kemajuan. Lihat diagram kelas untuk melihat hubungan antara komponen pelacakan kemajuan di SDK.

Kustomisasi ConsoleProgressBar

Sesuaikan format bilah default

Contoh berikut menyesuaikan format progress bar default, yaitu ColoredTransferProgressBarFormat<add link>. Format ini menunjukkan kemajuan dengan warna berbeda tergantung pada status transfer.

Contoh berubah:

  • karakter dari default “#” ke “=”

  • lebar bar dari default 50 hingga 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);

Gambar berikut menunjukkan output konsol untuk built-in yang disesuaikan ConsoleProgressBar dengan lebar 100 dan karakter “=”:

Output konsol menunjukkan progress bar yang disesuaikan menggunakan tanda sama dengan lebar 100 karakter

Sesuaikan dengan menggunakan format bilah kemajuan biasa

Contoh berikut menyesuaikan progress bar default dengan menggunakan built-in PlainProgressBarFormat <add link> dengan karakter kustom dan lebar. PlainProgressBarFormatTampilan hanya dalam warna hitam. Warnanya tidak berubah berdasarkan status transfer.

Contoh berubah:

  • karakter dari default “#” ke “*”

  • lebar bar dari default 50 hingga 25

  • progressBarFormatcontoh default dari ColoredTransferProgressBarFormat ke 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);

Gambar berikut menunjukkan output konsol untuk built-in yang disesuaikan ConsoleProgressBar menggunakan format bilah kemajuan biasa dengan lebar 25 dan karakter “*”:

Output konsol menunjukkan progress bar hitam polos menggunakan tanda bintang dengan lebar 25 karakter

Sesuaikan dengan membuat format bar baru

Contoh berikut menyesuaikan progress bar default dengan menggunakan format bar baru (extending ProgressBarFormat<add link>) alih-alih menyesuaikan format bawaan.

<?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);

Gambar berikut menunjukkan output konsol untuk built-in yang disesuaikan ConsoleProgressBar menggunakan format bilah kemajuan khusus:

Output konsol menunjukkan format kemajuan berbasis persentase khusus yang menampilkan nama objek dan byte yang ditransfer

Format bilah khusus menerima beberapa parameter:

  • object_name

  • persen

  • progress_bar

  • to_be_ditransfer

  • ditransfer

  • unit

Anda dapat menggabungkan nama parameter (karakter pipa) yang dibatasi untuk menyesuaikan output. Contoh menggunakan template berikut. getFormatTemplateMetode PercentBarFormat kelas mengembalikan template ini:

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