Trasferisci le directory da e verso Amazon S3 utilizzando AWS SDK per PHP la versione 3 - AWS SDK per PHP

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Trasferisci le directory da e verso Amazon S3 utilizzando AWS SDK per PHP la versione 3

Usa la Transfer classe nella AWS SDK per PHP versione 3 per caricare intere directory in un bucket Amazon S3 e scaricare interi bucket in una directory locale.

Caricamento di una directory locale su Amazon S3

L'Aws\S3\Transferoggetto esegue i trasferimenti. L'esempio seguente mostra come caricare in modo ricorsivo una directory locale di file in un bucket 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. $directoryTransfer = new \Aws\S3\Transfer($client, $source, $dest); // Perform the transfer synchronously. $directoryTransfer->transfer();

In questo esempio, abbiamo creato un client Amazon S3, creato un Transfer oggetto ed eseguito il trasferimento in modo sincrono.

L'esempio precedente mostra la quantità minima di codice necessaria per eseguire un trasferimento. Un Transfer oggetto può anche eseguire trasferimenti in modo asincrono e dispone di varie opzioni di configurazione che è possibile utilizzare per personalizzare i trasferimenti.

Puoi caricare i file locali in una «sottocartella» di un bucket Amazon S3 fornendo un key prefix nell'URI. s3:// L'esempio seguente mostra come caricare file locali su disco in un bucket bucket e come archiviare file con il prefisso della chiave foo.

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

Scaricare un bucket Amazon S3

Puoi scaricare in modo ricorsivo un bucket Amazon S3 in una directory locale su disco specificando l'argomento $source come URI Amazon S3 (ad esempios3://bucket) e $dest l'argomento come percorso di una directory locale.

// Where the files will be sourced from. $source = 's3://bucket'; // Where the files will be transferred to. $dest = '/path/to/destination/dir'; $directoryTransfer = new \Aws\S3\Transfer($client, $source, $dest); $directoryTransfer->transfer();
Nota

L'SDK crea automaticamente tutte le directory necessarie durante il download degli oggetti nel bucket.

Puoi includere un prefisso chiave nell'URI di Amazon S3 dopo il bucket per scaricare solo gli oggetti archiviati in una «pseudo-cartella». L'esempio seguente mostra i download dei soli file memorizzati con il prefisso della chiave "/foo" di un determinato bucket.

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

Configurazione

Il costruttore dell'oggetto Transfer accetta i seguenti argomenti.

$client

L'oggetto Aws\ClientInterface da utilizzare per eseguire i trasferimenti.

$source(Iteratorstringa |)

I dati di origine in fase di trasferimento. Questo può indicare un percorso locale su disco (ad esempio/path/to/files) o un bucket Amazon S3 (ad esempio). s3://bucket L'URI s3:// può contenere anche una chiave del prefisso che può essere utilizzata solo per il trasferimento di oggetti con un prefisso comune.

Se l'$sourceargomento è un URI Amazon S3, l'$destargomento deve essere una directory locale (e viceversa).

Oltre a fornire un valore della stringa, è anche possibile fornire un oggetto \Iterator che produce nomi di file assoluti. Se fornisci un \Iterator oggetto, devi fornire un'base_diropzione nell'array $options associativo.

$dest

La destinazione in cui i file verranno trasferiti. Se l'$sourceargomento è un percorso locale su disco, $dest deve essere un URI del bucket Amazon S3 (ad esempio). s3://bucket Se l'$sourceargomento è un URI del bucket Amazon S3, l'$destargomento deve essere un percorso locale su disco.

$options

Un array associativo delle opzioni di trasferimento. Le seguenti opzioni di trasferimento sono valide:

add_content_md5 (bool)

Imposta su true per calcolare il MD5 checksum per i caricamenti.

base_dir (Stringa)

Directory di base dell'origine, se $source è un'iterazione. Se l'opzione $source non è un array, questa opzione viene ignorata.

before (callable)

Un callback da invocare prima di ogni trasferimento. Il callback deve disporre di una firma della funzione, come function (Aws\Command $command) {...}. Il comando fornito sarà GetObject, PutObject, CreateMultipartUpload, UploadPart o CompleteMultipartUpload.

mup_threshold (int)

Le dimensioni in byte di un caricamento in più parti da utilizzare al posto di PutObject. Il valore predefinito è 16777216 (16 MB).

concurrency (int, predefinito=5)

Numero di file da caricare simultaneamente. Il valore ottimale varia in base al numero di file caricati e alle dimensioni medie di ciascun file. Di solito, i file di dimensioni minori possono contare su un valore di simultaneità maggiore rispetto ai file di dimensioni più grandi.

debug (bool)

Imposta su true per stampare le informazioni di debug per i trasferimenti. Imposta su una risorsa fopen() per la scrittura su un flusso specifico invece che su STDOUT.

Trasferimenti asincroni

L'oggetto Transfer è un'istanza di GuzzleHttp\Promise\PromisorInterface. Pertanto, il trasferimento può verificarsi in modo asincrono e viene avviato chiamando il metodo promise dell'oggetto.

$source = '/path/to/source/files'; $dest = 's3://bucket'; $directoryTransfer = new \Aws\S3\Transfer($client, $source, $dest); // Initiate the transfer and get a promise. $promise = $directoryTransfer->promise(); // Do something when the transfer is complete using the then() method. $promise->then(function () { echo 'Done!'; });

La promessa viene rifiutata se un file non viene trasferito. È possibile gestire il trasferimento non riuscito in modo asincrono utilizzando il metodo otherwise della promessa. La funzione otherwise accetta un callback da invocare quando si verifica un errore. Il callback accetta il comando $reason for the rejection, che in genere è un'istanza di Aws\Exception\AwsException (sebbene al callback possa essere fornito un valore di qualsiasi tipo).

$promise->otherwise(function ($reason) { echo 'Transfer failed: '; var_dump($reason); });

Poiché l'oggetto Transfer restituisce una promessa, questi trasferimenti possono verificarsi simultaneamente con altre promesse asincrone.

Personalizzazione del trasferimento delle directory

Aggiungendo un callback al costruttore, è possibile personalizzare le opzioni che esegue. Transfer

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