本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
目錄操作
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 方法接受 UploadDirectoryRequest<add link> 的執行個體做為引數。
UploadDirectoryRequest 參數
| 參數 | Type | 必要 | 描述 |
|---|---|---|---|
|
|
string |
是 |
要上傳的本機目錄路徑。 |
|
|
string |
是 |
目的地 S3 儲存貯體名稱。 |
|
|
陣列 |
否 |
所有檔案的其他上傳物件請求參數。 |
|
|
陣列 |
否 |
目錄上傳的組態選項。如需組態選項的詳細資訊,請參閱下一節。 |
|
|
陣列 |
否 |
|
|
|
bool |
-1 "執行時間預設值" |
指出遞迴檔案三次演練的最大深度。 |
|
|
|
否 |
所有上傳的進度追蹤器。 |
| 選項 | Type | 預設 | Description |
|---|---|---|---|
|
|
bool |
|
是否要遞迴上傳子目錄。 |
|
|
bool |
|
是否遵循符號連結。 |
|
|
string |
'' |
要新增至所有物件金鑰的字首。 |
|
|
string |
'/' |
要在 S3 物件金鑰中使用的分隔符號。 |
track_progress |
bool | false |
是否追蹤進度。 |
|
|
int | 100 | 並行上傳的數量上限。 |
|
|
可呼叫 |
null |
用於篩選要上傳哪些檔案的函數。 |
|
|
可呼叫 |
null |
用於自訂每個上傳請求的函數。 |
|
|
可呼叫 |
null |
處理上傳失敗的函數。 |
可呼叫$config的選項類型
| 選項名稱 | 參數名稱 | 參數類型 | 參數資訊 |
|---|---|---|---|
filter |
$file |
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 方法接受 DownloadDirectoryRequest<add link> 執行個體做為引數。
DownloadDirectoryRequest 參數
| 參數 | Type | 必要 | 描述 |
|---|---|---|---|
|
|
string |
是 |
下載物件的來源 S3 儲存貯體名稱。 |
|
|
string |
是 |
要下載檔案的本機目錄。 |
|
|
陣列 |
否 |
所有檔案的其他下載物件請求參數。 |
|
|
陣列 |
否 |
目錄下載的組態選項。如需組態選項的詳細資訊,請參閱下一節。 |
|
|
陣列 |
否 |
|
|
|
|
否 |
所有下載的進度追蹤器。 |
| 選項 | Type | 預設 | Description |
|---|---|---|---|
|
|
string |
'' |
用於篩選的字首 (如果不在 中 |
|
|
bool |
|
是否追蹤進度。 |
|
|
可呼叫 |
|
用於篩選要下載哪些 S3 物件的函數。 |
|
|
可呼叫 |
|
用於自訂每個下載請求的 函數。 |
|
|
陣列 |
[] |
|
|
|
bool |
false |
當物件目的地檔案路徑已存在時是否失敗。 |
|
|
可呼叫 |
null |
處理下載失敗的函數。 |
|
|
int |
100 |
並行下載的最大數量。 |
|
|
int |
各有不同 |
分段下載類型範圍的分段下載的分段大小。 |
可呼叫$config的選項類型
| 選項名稱 | 參數名稱 | 參數類型 | 參數資訊 |
|---|---|---|---|
filter |
$objectKey |
string |
儲存貯體中的物件金鑰名稱。 |
download_object_request_modifier |
$requestArgs |
陣列 | 每個個別下載請求的請求引數。如需陣列選項的詳細資訊,請參閱 getObject 方法的參數語法一節。 |
failure_policy |
$downloadObjectRequestArgs |
陣列 |
每個個別下載請求的請求引數。如需陣列選項的詳細資訊,請參閱 getObject 方法的參數語法一節。 |
$downloadDirectoryRequest |
陣列 |
具有來源儲存貯體和目標目錄的陣列,用於下載目錄操作。 |
|
$reason |
Throwable |
例外狀況持有者,其中包含造成失敗的原因資訊。 |
|
$downloadDirectoryResult |
DownloadDirectoryResult <新增連結> |
包含成功下載的物件數量和失敗的物件數量的物件。 |
目錄操作的運作方式
本節說明 S3 Transfer Manager 如何在目錄操作期間處理檔案路徑和物件金鑰。
上傳路徑處理
當您上傳目錄時,軟體開發套件會從檔案路徑建構 S3 物件金鑰:
-
計算每個檔案相對於來源目錄的路徑
-
如果指定,則加上
s3_prefix值 (自動新增結尾斜線) -
將作業系統目錄分隔符號取代為
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
下載路徑處理
當您下載目錄時,軟體開發套件會從 S3 物件金鑰建構本機檔案路徑:
-
如果指定,
s3_prefix從物件金鑰移除 -
以作業系統目錄分隔符號取代 S3 分隔符號 (
/) -
將結果附加至目的地目錄
下載一律是遞迴的。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 與作業系統目錄分隔符號不同,則會以作業系統目錄分隔符號取代 s3 分隔符號。
範例 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