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_progressketruedalam$configarray 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
SingleProgressTrackerinstance baru atau berikan implementasi kustomAbstractTransferListener. Lewatkan pelacak Anda ke operasi file sebagai$progressTrackerparameter. -
<?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:
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
truedalam 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
MultiProgressTrackerinstance baru dan teruskan ke operasi direktori sebagai$progressTrackerparameter. -
<?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:
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
AbstractTransferListenerdan mengimplementasikanProgressTrackerInterface<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 “=”:
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 dariColoredTransferProgressBarFormatkePlainProgressBarFormat
<?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 “*”:
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:
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]"