翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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 バケットをディスク上のローカルディレクトリに再帰的にダウンロードするには、$source
Amazon 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
引数はディスク上のローカルパスです。$dest
Amazon S3 バケット URI である必要があります (例:s3://bucket
). そのファイルに$source
引数はAmazon S3 バケットの URI であり、$dest
引数はディスク上のローカルパスである必要があります。 -
$options
-
転送オプション の連想配列。
転送オプション
-
base_dir
(文字列) -
$source
がイテレーターの場合、ソースの基本ディレクトリ。$source
オプションが配列ではない場合、このオプションは無視されます。 -
before
(callable) -
それぞれの転送の前に呼び出すコールバック。このコールバックは、
function (Aws\Command $command) {...}
のような関数の署名を持っている必要があります。指定されるコマンドはGetObject
、PutObject
、CreateMultipartUpload
、UploadPart
、または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'; } }, ]);