Amazon S3 Transfer ManagerAWS SDK for PHPバージョン 3 - AWS SDK for PHP

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Amazon S3 Transfer ManagerAWS SDK for PHPバージョン 3

Amazon S3 Transfer Manager は、AWS SDK for PHPは、ディレクトリ全体を Amazon S3 バケットにアップロードするため、およびバケット全体をローカルディレクトリにダウンロードするために使用されます。

ローカルディレクトリを Amazon S3 にアップロードする

Aws\S3\Transfer オブジェクトは転送を実行するために使用されます。以下の例では、ローカルディレクトリのファイルを再帰的に Amazon S3 バケットにアップロードする方法を示します。

// Create an S3 client $client = new \Aws\S3\S3Client([ 'region' => 'us-west-2', 'version' => '2006-03-01', ]); // Where the files will be source from $source = '/path/to/source/files'; // Where the files will be transferred to $dest = 's3://bucket'; // Create a transfer object $manager = new \Aws\S3\Transfer($client, $source, $dest); // Perform the transfer synchronously $manager->transfer();

この例では、Amazon S3 クライアントを作成し、Transferオブジェクトを同期して転送を実行しました。前の例を使用して、転送の実行に必要な、最小限のコードの量を示します。転送オブジェクトは非同期で転送を実行でき、転送のカスタマイズに使用できるさまざまな設定オプションがあります。

でkey prefix 指定することで、ローカルファイルを Amazon S3 バケットの「サブフォルダ」にアップロードできます。s3://URI。次の例では、ローカルディスク上のファイルを bucket バケットにアップロードして、foo キープレフィックスにファイルを保存します。

$source = '/path/to/source/files'; $dest = 's3://bucket/foo'; $manager = new \Aws\S3\Transfer($client, $source, $dest); $manager->transfer();

Amazon S3 バケットのダウンロード

Amazon S3 バケットをディスク上のローカルディレクトリに再帰的にダウンロードするには、$sourceAmazon S3 URI としての引数 (例:s3://bucket) と$dest引数をローカルディレクトリへのパスとして指定します。

// Where the files will be sourced from $source = 's3://bucket'; // Where the files will be transferred to $dest = '/path/to/destination/dir'; $manager = new \Aws\S3\Transfer($client, $source, $dest); $manager->transfer();
注記

バケット内にオブジェクトをダウンロードするときに、SDK は必要なディレクトリを自動的に作成します。

「疑似フォルダ」に保存されたオブジェクトのみをダウンロードするには、Amazon S3 URI でバケットの後にkey prefix に含めることができます。次の例では、指定されたバケットのキープレフィックス「/foo」に保存されたファイルのみをダウンロードします。

$source = 's3://bucket/foo'; $dest = '/path/to/destination/dir'; $manager = new \Aws\S3\Transfer($client, $source, $dest); $manager->transfer();

設定

Transfer オブジェクトのコンストラクタでは次の引数を指定できます。

$client

転送の実行に使用する Aws\ClientInterface オブジェクト。

$source(string |Iterator)

転送されるソースデータ。これは、ディスク上のローカルパスを指すことができます (例:/path/to/files) または Amazon S3 バケット (例:s3://bucket). s3:// URI には、共通プレフィックスにあるオブジェクトのみを転送するために使用できるキープレフィックスも含めることができます。

そのファイルに$source引数はAmazon S3 URI で、$dest引数はローカルディレクトリである必要があります (逆の場合も同様)。

文字列値の提供だけでなく、絶対ファイル名を生成する \Iterator オブジェクトを提供することもできます。イテレーターを指定した場合、 連想配列で オプションを指定するbase_dir必要が$optionsあります。

$dest

ファイルが転送される送信先。そのファイルに$source引数はディスク上のローカルパスです。$destAmazon S3 バケット URI である必要があります (例:s3://bucket). そのファイルに$source引数はAmazon S3 バケットの URI であり、$dest引数はディスク上のローカルパスである必要があります。

$options

転送オプション の連想配列。

転送オプション

base_dir (文字列)

$source がイテレーターの場合、ソースの基本ディレクトリ。$source オプションが配列ではない場合、このオプションは無視されます。

before (callable)

それぞれの転送の前に呼び出すコールバック。このコールバックは、function (Aws\Command $command) {...} のような関数の署名を持っている必要があります。指定されるコマンドは GetObjectPutObjectCreateMultipartUploadUploadPart、または CompleteMultipartUpload コマンドです。

mup_threshold (int)

PutObject の代わりにマルチパートアップロードを使用するときのサイズ (バイト単位)。デフォルトで 16777216 (16 MB) に設定されます。

concurrency (int, default=5)

同時にアップロードするファイル数。理想的な同時実行値は、アップロードされるファイルの数と、各ファイルの平均サイズで変わります。一般的に、小さいファイルでは多数の同時実行により利点がありますが、大きいファイルではありません。

debug (ブール)

転送に関するデバッグ情報を出力するには true に設定します。STDOUT に書き込む代わりに、特定のストリームに書き込むには fopen() リソースに設定します。

非同期転送

Transfer オブジェクトは GuzzleHttp\Promise\PromisorInterface のインスタンスです。つまり、転送は非同期的に行われ、オブジェクトの promise メソッドを呼び出すことで、処理が開始されます。

$source = '/path/to/source/files'; $dest = 's3://bucket'; $manager = new \Aws\S3\Transfer($client, $source, $dest); // Initiate the transfer and get a promise $promise = $manager->promise(); // Do something when the transfer is complete using the then() method $promise->then(function () { echo 'Done!'; });

いずれかのファイルを転送できない場合、promise は拒否されます。promise の otherwise メソッドを使用して失敗した転送を非同期で処理することができます。エラーが発生したとき、呼び出されるコールバックを otherwise 関数は受け付けます。コールバックは拒否に対する $reason を受け入れます。これは、通常 Aws\Exception\AwsException のインスタンスです (ただし任意のタイプの値はコールバックに配信可能)。

$promise->otherwise(function ($reason) { echo 'Transfer failed: '; var_dump($reason); });

Transfer オブジェクトは promise を返すので、これらの転送は他の非同期 promise と同時に発生する可能性があります。

Transfer Manager のコマンドのカスタマイズ

転送マネージャによって実行されるオペレーションに対して、コンストラクタに渡すコールバックを介してオペレーションでカスタムオプションを設定できます。

$uploader = new Transfer($s3Client, $source, $dest, [ 'before' => function (\Aws\Command $command) { // Commands can vary for multipart uploads, so check which command // is being processed if (in_array($command->getName(), ['PutObject', 'CreateMultipartUpload'])) { // Set custom cache-control metadata $command['CacheControl'] = 'max-age=3600'; // Apply a canned ACL $command['ACL'] = strpos($command['Key'], 'CONFIDENTIAL') ### false ? 'public-read' : 'private'; } }, ]);