기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
진행 상황 추적
S3 Transfer Manager는 내장된 진행 상황 추적 기능을 제공합니다.
모든 작업 추적
S3TransferManager 인스턴스true에서를 로 설정하여 모든 작업(파일 및 디렉터리)에 대한 추적을 활성화track_progress할 수 있습니다.
<?php use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager( null, [ 'track_progress' => true, ] );
이 설정을 사용하면 SDK는 파일 작업에 내장 SingleProgressTracker<링크 추가>를 사용하고 디렉터리 작업에 MultiProgressTracker<링크 추가>를 사용합니다.
단일 파일 작업 추적
- 전송 관리자에서 진행 상황 추적을 활성화하지 않은 경우 두 가지 방법으로 개별 메서드에 대한 추적을 활성화할 수 있습니다.
-
특정 파일 작업의
$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.
단일 디렉터리 작업 추적
전송 관리자에서 진행 상황 추적을 활성화하지 않은 경우 두 가지 방법으로 디렉터리 작업에 대해 활성화할 수 있습니다.
- 메서드의
$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 인터페이스를 확장하는 클래스를 생성하고 요청 시 메서드에 전달합니다.
다음 구현에서는 단일 파일 작업에 대한 진행률 정보를 텍스트 형식으로 표시합니다.
<?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<링크 추가>를 확장AbstractTransferListener하고 구현하여 사용자 지정 구현을 생성합니다. -
내장 트래커에 전달되는
ConsoleProgressBar<링크 추가>를 구성하여 기존 구현을 사용자 지정합니다. -
사용자 지정
ProgressBar<링크 추가>를 구현하여 내장 트래커에 전달합니다.
다음 예제에서는 진행 상황 추적을 사용자 지정하는 방법을 보여줍니다. SDK의 진행 상황 추적 구성 요소 간의 관계를 보려면 클래스 다이어그램을 참조하세요.
사용자 지정 ConsoleProgressBar
기본 막대 형식 사용자 지정
다음 예제에서는 기본 진행률 표시줄 형식인 ColoredTransferProgressBarFormat<링크 추가>를 사용자 지정합니다. 이 형식은 전송 상태에 따라 다른 색상의 진행 상황을 보여줍니다.
이 예제는 다음과 같이 변경됩니다.
-
기본 "#"에서 "="까지의 문자
-
기본값 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);
다음 이미지는 너비ConsoleProgressBar가 100이고 문자가 "="인 사용자 지정 내장에 대한 콘솔 출력을 보여줍니다.
일반 진행률 표시줄 형식을 사용하여 사용자 지정
다음 예제에서는 기본 제공 PlainProgressBarFormat<링크 추가>를 사용자 지정 문자 및 너비와 함께 사용하여 기본 진행률 표시줄을 사용자 지정합니다. 는 검은색으로만 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 사용하는 사용자 지정 내장에 대한 콘솔 출력을 보여줍니다.
사용자 지정 막대 형식은 여러 파라미터를 허용합니다.
-
객체 이름
-
%
-
progress_bar
-
to_be_transferred
-
전송됨
-
단위
구분된 (파이프 문자) 파라미터 이름을 결합하여 출력을 사용자 지정할 수 있습니다. 이 예제에서는 다음 템플릿을 사용합니다. PercentBarFormat 클래스의 getFormatTemplate 메서드는 다음 템플릿을 반환합니다.
"|object_name| - |percent|% [|transferred| |unit|ytes]"