기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
오류 처리
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();