翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
エラー処理
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();