오류 처리 - AWS SDK for PHP

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

오류 처리

S3 Transfer Manager는 비동기 작업에 promise를 사용합니다. promise의 otherwise 또는 then 메서드를 사용하여 오류를 처리할 수 있습니다. 구현을 try-catch 블록으로 래핑할 수도 있습니다.

Promise 오류 처리

otherwise 사용:

<?php use Aws\S3\S3Transfer\Models\UploadRequest; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager(null, []); $uploadPromise = $transferManager->upload( new UploadRequest( '/path/to/file.txt', [ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'file.txt', ] ) ); $uploadPromise->otherwise(function (Throwable $reason) { echo "Upload failed: " . $reason->getMessage() . "\n"; });

then 사용:

<?php use Aws\S3\S3Transfer\Models\UploadRequest; use Aws\S3\S3Transfer\Models\UploadResult; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager(null, []); $uploadPromise = $transferManager->upload( new UploadRequest( '/path/to/file.txt', [ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'file.txt', ] ) ); $uploadPromise->then( function (UploadResult $result) { echo "Upload succeeded!\n"; }, function (Throwable $error) { echo "Upload failed: " . $error->getMessage() . "\n"; } )->wait();

try-catch 블록 사용

<?php use Aws\S3\S3Transfer\Exception\S3TransferException; use Aws\S3\S3Transfer\Models\UploadRequest; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager(null, []); $uploadPromise = $transferManager->upload( new UploadRequest( '/path/to/file.txt', [ 'Bucket' => 'amzn-s3-demo-bucket', 'Key' => 'file.txt', ] ) ); try { $uploadPromise->wait(); } catch (S3TransferException $exception) { echo "Upload failed: " . $exception->getMessage() . "\n"; }

<S3TransferManager 예외에 대한 자세한 내용과 이에 대한 API 참조 링크를 추가합니다.>

디렉터리 작업 실패 정책

디렉터리 작업의 경우 실패 정책 콜백을 지정할 수도 있습니다. 이 콜백은 개별 파일의 실패를 처리하고 디렉터리 업로드를 계속할지 여부를 결정합니다.

uploadDirectory 작업에 'failure_policy' 함수 사용
<?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', [], [ 'failure_policy' => function ( $requestArgs, $uploadDirectoryRequestArgs, $reason, $uploadDirectoryResponse ) { echo "Failed to upload {$requestArgs['Key']}: " . "{$reason->getMessage()}\n"; echo "So far, uploaded: " . "{$uploadDirectoryResponse->getObjectsUploaded()}, " . "failed: {$uploadDirectoryResponse->getObjectsFailed()}\n"; // Return true to continue with other files, // or throw an exception to abort. return true; }, ] ) ); $uploadDirPromise->wait();
downloadDirectory 작업에 'failure_policy' 함수 사용
<?php use Aws\S3\S3Transfer\Models\DownloadDirectoryRequest; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager(null, []); // Log errors but continue with other files. $downloadDirPromise = $transferManager->downloadDirectory( new DownloadDirectoryRequest( 'amzn-s3-demo-bucket', '/path/to/directory', [], [ 'failure_policy' => function ( $requestArgs, $downloadDirectoryRequestArgs, $reason, $downloadDirectoryResponse ) { error_log("Failed to download {$requestArgs['Key']}: " . "{$reason->getMessage()}"); // If we've had too many failures, abort the entire operation. if ($downloadDirectoryResponse->getObjectsFailed() > 10) { throw new \Exception( "Too many download failures, aborting operation" ); } // Return void to continue with other files. return; }, ] ) ); $downloadDirPromise->wait();