AWS SDK for PHP 버전 3을 사용한 Amazon S3 전송 관리자 - AWS SDK for PHP

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

AWS SDK for PHP 버전 3을 사용한 Amazon S3 전송 관리자

AWS SDK for PHP의 Amazon S3 전송 관리자는 전체 디렉터리를 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 sourced 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 객체를 생성하고 전송을 동기적으로 수행했습니다. 이전 예제를 사용하여 전송을 수행하는 데 필요한 최소한의 코드를 보여줍니다. 전송 객체는 전송을 비동기적으로 수행할 수 있으며 전송을 사용자 지정하는 데 사용할 수 있는 다양한 구성 옵션이 있습니다.

s3:// URI에 키 접두사를 제공하여 Amazon S3 버킷의 "하위 폴더"에 로컬 파일을 업로드할 수 있습니다. 다음 예에서는 디스크에 있는 로컬 파일을 bucket 버킷에 업로드하고 foo 키 접두사 아래에 파일을 저장합니다.

$source = '/path/to/source/files'; $dest = 's3://bucket/foo'; $manager = new \Aws\S3\Transfer($client, $source, $dest); $manager->transfer();

Amazon S3 버킷 다운로드

$source 인수를 Amazon S3 URI(예: s3://bucket)로 지정하고, $dest 인수를 로컬 디렉터리에 대한 경로로 지정하여 디스크에 있는 로컬 디렉터리에 Amazon S3 버킷을 재귀적으로 다운로드할 수 있습니다.

// 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에서 버킷 뒤에 키 접두사를 포함할 수 있습니다. 다음 예에서는 지정된 버킷의 "/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(문자열 | Iterator)

전송 중인 소스 데이터입니다. 이 인수는 디스크에 있는 로컬 경로(예: /path/to/files) 또는 Amazon S3 버킷(예: s3://bucket)을 가리킬 수 있습니다. 또한 s3:// URI는 공통 접두사 아래에 잇는 객체만 전송하는 데 사용 가능한 키 접두사를 포함할 수 있습니다.

$source 인수가 Amazon S3 URI인 경우 $dest 인수는 로컬 디렉터리여야 하며 그 반대의 경우도 마찬가지입니다.

문자열 값을 제공하는 이외에 절대 파일 이름을 생성하는 \Iterator 객체를 제공할 수도 있습니다. 이터레이터를 제공하는 경우 $options 연관 배열에 base_dir 옵션을 제공해야 합니다.

$dest

파일이 전송될 대상입니다. $source 인수가 디스크에 있는 로컬 경로인 경우 $dest는 Amazon S3 버킷 URI(예: s3://bucket)이고, $source 인수가 Amazon S3 버킷 URI인 경우 $dest 인수는 디스크에 있는 로컬 경로여야 합니다.

$options

전송 옵션의 결합형 배열입니다. 유효한 전송 옵션은 다음과 같습니다.

add_content_md5 (bool)

업로드에 대한 MD5 체크섬을 true 계산하려면 로 설정합니다.

base_dir(문자열)

$source가 반복자인 경우 소스의 기본 디렉터리입니다. $source 옵션이 배열이 아닌 경우 이 옵션이 무시됩니다.

before(callable)

각 전송 이전에 호출할 콜백입니다. 콜백에는 function (Aws\Command $command) {...}와 같은 함수 서명이 있어야 합니다. 제공되는 명령은 GetObject, PutObject, CreateMultipartUpload, UploadPart 또는 CompleteMultipartUpload 명령입니다.

mup_threshold (int)

PutObject 대신 사용할 멀티파트 업로드의 크기(바이트)입니다. 기본값은 16777216(16MB)입니다.

concurrency(정수, 기본값=5)

동시에 업로드할 파일 수입니다. 이상적인 동시성 값은 업로드 중인 파일 수와 각 파일의 평균 크기에 따라 다릅니다. 일반적으로 파일이 작을수록 동시성을 높여 이점을 얻을 수 있지만 파일이 크면 이점이 없습니다.

debug (bool)

전송에 대한 디버그 정보를 출력하려면 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와 동시에 발생할 수 있습니다.

전송 관리자의 명령 사용자 지정

생성기에 전달된 콜백을 통해 전송 관리자에서 실행되는 작업에 대해 사용자 지정 옵션을 설정할 수 있습니다.

$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'; } }, ]);