디렉터리 작업 - 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 메서드는 UploadDirectoryRequest<링크 추가>의 인스턴스를 인수로 허용합니다.

UploadDirectoryRequest 파라미터

파라미터 Type 필수 설명

$sourceDirectory

문자열

업로드할 로컬 디렉터리의 경로입니다.

$targetBucket

문자열

대상 S3 버킷 이름입니다.

$uploadRequestArgs

array

아니요

모든 파일에 대한 추가 업로드 객체 요청 파라미터입니다.

$config

array

아니요

디렉터리 업로드를 위한 구성 옵션입니다. 구성 옵션에 대한 자세한 내용은 다음 섹션을 참조하세요.

$listeners

array

아니요

TransferListener 객체의 배열입니다. SDK는 파일TransferListener당 각를 복제합니다.

$max_depth

bool

-1 "런타임 기본값"

재귀 파일의 최대 깊이를 나타냅니다.

$progressTracker

TransferListener

아니요

모든 업로드에 대한 진행률 트래커입니다.

옵션 Type 기본값 설명

recursive

bool

false

하위 디렉터리를 재귀적으로 업로드할지 여부입니다.

follow_symbolic_links

bool

false

심볼 링크를 따를지 여부입니다.

s3_prefix

문자열

''

모든 객체 키에 추가할 접두사입니다.

s3_delimiter

문자열

'/'

S3 객체 키에 사용할 구분 기호입니다.

track_progress bool 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 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 필수 설명

$sourceBucket

문자열

객체를 다운로드할 소스 S3 버킷 이름입니다.

$destinationDirectory

문자열

파일을 다운로드할 로컬 디렉터리입니다.

$downloadRequestArgs

array

아니요

모든 파일에 대한 추가 객체 다운로드 요청 파라미터입니다.

$config

array

아니요

디렉터리 다운로드를 위한 구성 옵션입니다. 구성 옵션에 대한 자세한 내용은 다음 섹션을 참조하세요.

$listeners

array

아니요

TransferListener 객체의 배열입니다. SDK는 파일TransferListener당 각를 복제합니다.

$progressTracker

TransferListener

아니요

모든 다운로드에 대한 진행률 트래커입니다.

옵션 Type 기본값 설명

s3_prefix

문자열

''

필터링을 위한 접두사입니다(에 없는 경우list_objects_v2_args).

track_progress

bool

false

진행 상황을 추적할지 여부입니다.

filter

호출 가능

null

다운로드할 S3 객체를 필터링하는 함수입니다.

download_object_request_modifier

호출 가능

null

각 다운로드 요청을 사용자 지정하는 함수입니다.

list_objects_v2_args

array

[]

ListObjectsV2 작업에 대한 인수입니다. 이 작업은 다운로드할 객체의 메타데이터를 가져옵니다.

fails_when_destination_exists

bool

false

객체 대상 파일 경로가 이미 있는 경우 실패할지 여부입니다.

failure_policy

호출 가능

null

다운로드 실패를 처리하는 함수입니다.

max_concurrency

int

100

최대 동시 다운로드 수입니다.

target_part_size_bytes

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 객체 키를 구성합니다.

  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