ディレクトリオペレーション - AWS SDK for PHP

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

ディレクトリオペレーション

S3 Transfer Manager はディレクトリ転送全体を処理できます。

ディレクトリをアップロードする

S3 Transfer Manager は、ディレクトリ全体を S3 バケットにアップロードできます。<キー値はアップロード時にファイル名になりますか?>

<?php use Aws\S3\S3Transfer\Models\UploadDirectoryRequest; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager(null, [ 'default_region' => 'us-west-2' ]); $uploadDirPromise = $transferManager->uploadDirectory( new UploadDirectoryRequest( '/path/to/local/directory', 'amzn-s3-demo-bucket', [ // Additional `putObject` parameters that apply to all files. 'ACL' => 'public-read', 'CacheControl' => 'max-age=3600', ], [ // Configuration options. 'recursive' => true, 'follow_symbolic_links' => false, 's3_prefix' => 'uploads/2023/', 's3_delimiter' => '/', 'track_progress' => true, 'filter' => function ($file) { // Upload only .jpg files. return pathinfo($file, PATHINFO_EXTENSION) === 'jpg'; }, 'upload_object_request_modifier' => function ($args) { // Customize request arguments for each file. $args['ContentType'] = 'image/jpeg'; }, ] ) ); // Wait for the upload process to complete. $result = $uploadDirPromise->wait(); $uploaded = $result->getObjectsUploaded(); $failed = $result->getObjectsFailed(); echo "Uploaded {$uploaded} files. Failed: {$failed}\n";

uploadDirectory メソッドのパラメータ

uploadDirectory メソッドは <UploadDirectoryRequestadd link> のインスタンスを引数として受け入れます。

UploadDirectoryRequest 個のパラメータ

パラメータ タイプ 必須 説明

$sourceDirectory

文字列

あり

アップロードするローカルディレクトリのパス。

$targetBucket

string

あり

送信先 S3 バケット名。

$uploadRequestArgs

配列

不可

すべてのファイルに対する追加のアップロードオブジェクトリクエストパラメータ。

$config

配列

不可

ディレクトリのアップロードの設定オプション。設定オプションの詳細については、次のセクションを参照してください。

$listeners

配列

不可

TransferListener オブジェクトの配列。SDK は、ファイルTransferListenerごとにそれぞれクローンを作成します。

$max_depth

ブール

-1 「ランタイムデフォルト」

再帰ファイルの最大深度を 3 ウォークで示します。

$progressTracker

TransferListener

不可

すべてのアップロードの進行状況トラッカー。

オプション タイプ デフォルト 説明

recursive

ブール

false

サブディレクトリを再帰的にアップロードするかどうか。

follow_symbolic_links

ブール

false

シンボリックリンクに従うかどうか。

s3_prefix

string

''

すべてのオブジェクトキーに追加するプレフィックス。

s3_delimiter

string

'/'

S3 オブジェクトキーで使用する区切り文字。

track_progress ブール false 進行状況を追跡するかどうか。

max_concurrency

int 100 同時アップロードの最大数。

filter

呼び出し可能

null

アップロードするファイルをフィルタリングする関数。

upload_object_request_modifier

呼び出し可能

null

各アップロードリクエストをカスタマイズする関数。

failure_policy

呼び出し可能

null

アップロードの失敗を処理する関数。

呼び出し可能な$configオプションのタイプ
オプション名 パラメータ名 パラメータタイプ パラメータ情報
filter $file SplFileInfo|文字列

文字列にキャストする場合、ファイルパスです。それ以外の場合は、 のインスタンスですSplFileInfo

upload_object_request_modifier $requestArgs 配列 個々のアップロードリクエストのリクエスト引数。配列オプションの詳細については、putObject メソッドパラメータ構文セクションを参照してください。
failure_policy $uploadRequestArgs 配列 個々のアップロードリクエストのリクエスト引数。配列オプションの詳細については、配列オプションの putObject メソッドパラメータ構文セクションを参照してください。
$uploadDirectoryArgs 配列 アップロードディレクトリオペレーションのソースディレクトリとターゲットバケットを持つ配列。
$reason Throwable|文字列

失敗の原因に関する情報を含む例外所有者。

$uploadDirectoryResult UploadDirectoryResult アップロードに成功したオブジェクトの数と失敗したオブジェクトの数を含むオブジェクト。

uploadDirectory メソッドが正常に実行されると、UploadDirectoryResult<add link> が返されます。

ディレクトリのダウンロード

ディレクトリは S3 バケットからダウンロードできます。<ダウンロード時にファイル名はキー値ですか? キーに拡張子がない場合、ファイルにも拡張子はありませんか?>

<?php use Aws\S3\S3Transfer\Models\DownloadDirectoryRequest; use Aws\S3\S3Transfer\S3TransferManager; require __DIR__ . '/../vendor/autoload.php'; $transferManager = new S3TransferManager(null, [ 'default_region' => 'us-west-2' ]); $downloadDirPromise = $transferManager->downloadDirectory( new DownloadDirectoryRequest( 'amzn-s3-demo-bucket', '/path/to/local/directory', [ // Additional `getObject` parameters that apply to all files. ], [ // Configuration options. 's3_prefix' => 'uploads/2023/', 's3_delimiter' => '/', 'track_progress' => true, 'filter' => function ($key) { // Download only .jpg files. return pathinfo($key, PATHINFO_EXTENSION) === 'jpg'; }, 'download_object_request_modifier' => function ($args) { // Customize request arguments for each file. $args['ResponseContentType'] = 'image/jpeg'; }, 'list_objects_v2_args' => [ 'MaxKeys' => 1000, 'Prefix' => 'uploads/2023/', ], 'fails_when_destination_exists' => true, ] ) ); // Wait for the download process to complete. $result = $downloadDirPromise->wait(); $downloaded = $result->getObjectsDownloaded(); $failed = $result->getObjectsFailed(); echo "Downloaded {$downloaded} files. Failed: {$failed}\n";

downloadDirectory メソッドのパラメータ

downloadDirectory メソッドは <DownloadDirectoryRequestadd link> のインスタンスを引数として受け入れます。

DownloadDirectoryRequest 個のパラメータ

パラメータ タイプ 必須 説明

$sourceBucket

文字列

あり

オブジェクトのダウンロード元のソース S3 バケット名。

$destinationDirectory

string

あり

ファイルをダウンロードするローカルディレクトリ。

$downloadRequestArgs

配列

不可

すべてのファイルの追加のダウンロードオブジェクトリクエストパラメータ。

$config

配列

不可

ディレクトリのダウンロードの設定オプション。設定オプションの詳細については、次のセクションを参照してください。

$listeners

配列

不可

TransferListener オブジェクトの配列。SDK は、ファイルTransferListenerごとにそれぞれクローンを作成します。

$progressTracker

TransferListener

不可

すべてのダウンロードの進行状況トラッカー。

オプション タイプ デフォルト 説明

s3_prefix

string

''

フィルタリングのプレフィックス ( にない場合list_objects_v2_args)。

track_progress

ブール

false

進行状況を追跡するかどうか。

filter

呼び出し可能

null

ダウンロードする S3 オブジェクトをフィルタリングする関数。

download_object_request_modifier

呼び出し可能

null

各ダウンロードリクエストをカスタマイズする関数。

list_objects_v2_args

配列

[]

ListObjectsV2 オペレーションの引数。このオペレーションは、ダウンロードするオブジェクトのメタデータを取得します。

fails_when_destination_exists

ブール

false

オブジェクトの送信先ファイルパスが既に存在する場合に失敗するかどうか。

failure_policy

呼び出し可能

null

ダウンロードの失敗を処理する関数。

max_concurrency

int

100

同時ダウンロードの最大数。

target_part_size_bytes

int

可変

マルチパートダウンロードタイプの範囲が設定されている場合のマルチパートダウンロードのパートサイズ。

呼び出し可能な$configオプションのタイプ
オプション名 パラメータ名 パラメータタイプ パラメータ情報
filter $objectKey string

バケットのオブジェクトキー名。

download_object_request_modifier $requestArgs 配列 個々のダウンロードリクエストのリクエスト引数。配列オプションの詳細については、getObject メソッドパラメータ構文セクションを参照してください。
failure_policy $downloadObjectRequestArgs 配列

個々のダウンロードリクエストのリクエスト引数。配列オプションの詳細については、getObject メソッドパラメータ構文セクションを参照してください。

$downloadDirectoryRequest 配列

ダウンロードディレクトリオペレーションのソースバケットとターゲットディレクトリを持つ配列。

$reason Throwable

失敗の原因に関する情報を含む例外所有者。

$downloadDirectoryResult DownloadDirectoryResult <リンクの追加>

ダウンロードに成功したオブジェクトの数と失敗したオブジェクトの数を含むオブジェクト。

ディレクトリオペレーションの仕組み

このセクションでは、S3 Transfer Manager がディレクトリオペレーション中にファイルパスとオブジェクトキーを処理する方法について説明します。

アップロードパスの処理

ディレクトリをアップロードすると、SDK はファイルパスから S3 オブジェクトキーを構築します。

  1. ソースディレクトリに対する各ファイルのパスを計算します

  2. 指定した場合s3_prefix、値を付加します (末尾にスラッシュを自動的に追加します)

  3. OS ディレクトリ区切り文字を に置き換えます s3_delimiter (デフォルトは /)

recursive オプションは、サブディレクトリを含めるかどうかを制御します。false (デフォルト) の場合、最上位ファイルのみがアップロードされます。の場合true、サブディレクトリ内のすべてのファイルがアップロードされ、オブジェクトキーのディレクトリ構造が保持されます。

注記

アップロードされた各ファイルの S3 のキーは、指定された s3 プレフィックスになります。デフォルトでは null と、指定されたソースディレクトリから始まるファイルの相対パスが続きます。また、解決されたキー名のディレクトリ区切り文字を指定された s3 区切り文字に置き換えます。デフォルトでは / になります。

例 1

$sourceDirectory = "/opt/my-upload-directory"; $s3Prefix = "important/"; $s3Delimiter = "/"; // Default value

ディレクトリ構造

/opt/my-upload-directory/ -- my-file1.txt -- my-file-2.txt -- sub-dir/ ---- my-another-file1.txt ---- my-another-file2.txt

各ファイルのキーは次のとおりです。

$s3Prefix + $fileRelativePath;
- important/my-file1.txt - important/my-file-2.txt - important/sub-dir/my-another-file1.txt - important/sub-dir/my-another-file2.txt

例 2

$sourceDirectory = "/opt/my-docs"; $s3Prefix = ''; // No provided and it will defaulted to empty string $s3Delimiter = "/"; // Default value

ディレクトリ構造

/opt/my-docs/ -- my-file1.txt -- my-file-2.txt -- sub-dir/ ---- my-another-file1.txt ---- my-another-file2.txt

各ファイルのキーは次のとおりです。

$s3Prefix + $fileRelativePath;
- my-file1.txt - my-file-2.txt - sub-dir/my-another-file1.txt - sub-dir/my-another-file2.txt
例 ディレクトリパスのアップロード処理
<?php // Source directory: /home/user/photos/ // fla/beach.jpg // fla/sunset.jpg // fla/pool/party.jpg // With s3_prefix: '2023' and recursive: true // Results: // 2023/fla/beach.jpg // 2023/fla/sunset.jpg // 2023/fla/pool/party.jpg

ダウンロードパスの処理

ディレクトリをダウンロードすると、SDK は S3 オブジェクトキーからローカルファイルパスを構築します。

  1. 指定した場合、 オブジェクトキーs3_prefixから を削除します。

  2. S3 区切り文字 (/) を OS ディレクトリ区切り文字に置き換えます

  3. 結果を宛先ディレクトリに追加します。

ダウンロードは常に再帰的です。SDK は、指定されたプレフィックスのすべてのオブジェクトを取得し、必要に応じてサブディレクトリを作成します。セキュリティのためにパスが送信先ディレクトリの外部で解決されないことを検証します。

例 ディレクトリパス処理をダウンロードする
<?php // S3 objects: // 2023/fla/beach.jpg // 2023/fla/sunset.jpg // 2023/fla/pool/party.jpg // With s3_prefix: '2023' and destination: /home/user/downloads // Results: // /home/user/downloads/fla/beach.jpg // /home/user/downloads/fla/sunset.jpg // /home/user/downloads/fla/pool/party.jpg
注記

ダウンロードしたオブジェクトのファイルパスは次のように解決されます。

  • s3 プレフィックスを指定すると、オブジェクトキーから削除されます。

  • s3Delimiter が OS ディレクトリ区切り文字と異なる場合、s3 区切り文字は OS ディレクトリ区切り文字に置き換えられます。

例 1

$s3Prefix = "my-prefix"; $s3Objects = [ "my-prefix/file-1.txt", "my-prefix/file-2.txt", "my-prefix/subdir/file-1.txt" ]; $targetDirectory = "/opt/bucket/downloads/";

これらのオブジェクトがダウンロードされると、次のように配置されます。

/opt/bucket/downloads/ -- file-1.txt -- file-2.txt -- subdir/ ---- file-1.txt

ご覧のとおり、プレフィックスはオブジェクトの最終ファイルパスから削除されました。

例 2 - s3 プレフィックスなし

$s3Prefix = ""; // No provided $s3Objects = [ "README.md", "my-docs/file-1.txt", "my-docs/file-2.txt", "my-docs/statements/file-1.txt" ]; $targetDirectory = "/opt/bucket/downloads/";

これらのオブジェクトがダウンロードされると、次のように配置されます。

/opt/bucket/downloads/ -- README.md -- my-docs/ ---- file-1.txt ---- file-2.txt ---- statements/ ------ file-1.txt