기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
디렉터리 작업
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<링크 추가>의 인스턴스를 인수로 허용합니다.
UploadDirectoryRequest 파라미터
| 파라미터 | Type | 필수 | 설명 |
|---|---|---|---|
|
|
문자열 |
예 |
업로드할 로컬 디렉터리의 경로입니다. |
|
|
문자열 |
예 |
대상 S3 버킷 이름입니다. |
|
|
array |
아니요 |
모든 파일에 대한 추가 업로드 객체 요청 파라미터입니다. |
|
|
array |
아니요 |
디렉터리 업로드를 위한 구성 옵션입니다. 구성 옵션에 대한 자세한 내용은 다음 섹션을 참조하세요. |
|
|
array |
아니요 |
|
|
|
bool |
-1 "런타임 기본값" |
재귀 파일의 최대 깊이를 나타냅니다. |
|
|
|
아니요 |
모든 업로드에 대한 진행률 트래커입니다. |
| 옵션 | Type | 기본값 | 설명 |
|---|---|---|---|
|
|
bool |
|
하위 디렉터리를 재귀적으로 업로드할지 여부입니다. |
|
|
bool |
|
심볼 링크를 따를지 여부입니다. |
|
|
문자열 |
'' |
모든 객체 키에 추가할 접두사입니다. |
|
|
문자열 |
'/' |
S3 객체 키에 사용할 구분 기호입니다. |
track_progress |
bool | false |
진행 상황을 추적할지 여부입니다. |
|
|
int | 100 | 최대 동시 업로드 수입니다. |
|
|
호출 가능 |
null |
업로드할 파일을 필터링하는 함수입니다. |
|
|
호출 가능 |
null |
각 업로드 요청을 사용자 지정하는 함수입니다. |
|
|
호출 가능 |
null |
업로드 실패를 처리하는 함수입니다. |
호출 가능한 $config 옵션 유형
| 옵션 이름 | 파라미터 이름 | 파라미터 유형 | 파라미터 정보 |
|---|---|---|---|
filter |
$file |
SplFileInfo|문자열 |
문자열로 캐스팅되는 경우 파일 경로입니다. 그렇지 않으면의 인스턴스입니다 |
upload_object_request_modifier |
$requestArgs |
array | 각 개별 업로드 요청에 대한 요청 인수입니다. 배열 옵션에 대한 자세한 내용은 putObject 메서드의 파라미터 구문 섹션을 참조하세요. |
failure_policy |
$uploadRequestArgs |
array | 각 개별 업로드 요청에 대한 요청 인수입니다. 배열 옵션에 대한 자세한 내용은 배열 옵션에 대한 putObject 메서드의 파라미터 구문 섹션을 참조하세요. |
$uploadDirectoryArgs |
array | 업로드 디렉터리 작업을 위한 소스 디렉터리와 대상 버킷이 있는 배열입니다. | |
$reason |
Throwable|문자열 |
실패 원인에 대한 정보가 포함된 예외 소유자입니다. |
|
$uploadDirectoryResult |
UploadDirectoryResult |
성공적으로 업로드된 객체 수와 실패한 객체 수가 포함된 객체입니다. |
uploadDirectory 메서드가 성공적으로 실행되면 UploadDirectoryResult <링크 추가>를 반환합니다.
디렉터리 다운로드
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<링크 추가> 인스턴스를 인수로 허용합니다.
DownloadDirectoryRequest 파라미터
| 파라미터 | Type | 필수 | 설명 |
|---|---|---|---|
|
|
문자열 |
예 |
객체를 다운로드할 소스 S3 버킷 이름입니다. |
|
|
문자열 |
예 |
파일을 다운로드할 로컬 디렉터리입니다. |
|
|
array |
아니요 |
모든 파일에 대한 추가 객체 다운로드 요청 파라미터입니다. |
|
|
array |
아니요 |
디렉터리 다운로드를 위한 구성 옵션입니다. 구성 옵션에 대한 자세한 내용은 다음 섹션을 참조하세요. |
|
|
array |
아니요 |
|
|
|
|
아니요 |
모든 다운로드에 대한 진행률 트래커입니다. |
| 옵션 | Type | 기본값 | 설명 |
|---|---|---|---|
|
|
문자열 |
'' |
필터링을 위한 접두사입니다(에 없는 경우 |
|
|
bool |
|
진행 상황을 추적할지 여부입니다. |
|
|
호출 가능 |
|
다운로드할 S3 객체를 필터링하는 함수입니다. |
|
|
호출 가능 |
|
각 다운로드 요청을 사용자 지정하는 함수입니다. |
|
|
array |
[] |
|
|
|
bool |
false |
객체 대상 파일 경로가 이미 있는 경우 실패할지 여부입니다. |
|
|
호출 가능 |
null |
다운로드 실패를 처리하는 함수입니다. |
|
|
int |
100 |
최대 동시 다운로드 수입니다. |
|
|
int |
varies |
멀티파트 다운로드 유형의 범위가 지정될 때 멀티파트 다운로드의 파트 크기입니다. |
호출 가능한 $config 옵션 유형
| 옵션 이름 | 파라미터 이름 | 파라미터 유형 | 파라미터 정보 |
|---|---|---|---|
filter |
$objectKey |
문자열 |
버킷의 객체 키 이름입니다. |
download_object_request_modifier |
$requestArgs |
array | 각 개별 다운로드 요청에 대한 요청 인수입니다. 배열 옵션에 대한 자세한 내용은 getObject 메서드의 파라미터 구문 섹션을 참조하세요. |
failure_policy |
$downloadObjectRequestArgs |
array |
각 개별 다운로드 요청에 대한 요청 인수입니다. 배열 옵션에 대한 자세한 내용은 getObject 메서드의 파라미터 구문 섹션을 참조하세요. |
$downloadDirectoryRequest |
array |
디렉터리 다운로드 작업을 위한 소스 버킷과 대상 디렉터리가 있는 배열입니다. |
|
$reason |
Throwable |
실패 원인에 대한 정보가 포함된 예외 소유자입니다. |
|
$downloadDirectoryResult |
DownloadDirectoryResult <링크 추가> |
성공적으로 다운로드한 객체 수와 실패한 객체 수가 포함된 객체입니다. |
디렉터리 작업 작동 방식
이 섹션에서는 S3 Transfer Manager가 디렉터리 작업 중에 파일 경로와 객체 키를 처리하는 방법을 설명합니다.
업로드 경로 처리
디렉터리를 업로드하면 SDK는 파일 경로에서 S3 객체 키를 구성합니다.
-
소스 디렉터리를 기준으로 각 파일의 경로를 계산합니다.
-
지정된 경우
s3_prefix값을 준비합니다(후행 슬래시 자동 추가). -
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 객체 키에서 로컬 파일 경로를 구성합니다.
-
지정된 경우 객체 키
s3_prefix에서를 제거합니다. -
S3 구분 기호(
/)를 OS 디렉터리 구분자로 바꿉니다. -
대상 디렉터리에 결과를 추가합니다.
다운로드는 항상 재귀적입니다. 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