Gestione trasferimenti Amazon S3 con AWS SDK for PHP versione 3 - AWS SDK for 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à.

Gestione trasferimenti Amazon S3 con AWS SDK for PHP versione 3

Il gestore di trasferimenti Amazon S3 in AWS SDK for PHP viene utilizzato 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

Per eseguire il trasferimento viene utilizzato l'oggetto Aws\S3\Transfer. 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. $manager = new \Aws\S3\Transfer($client, $source, $dest); // Perform the transfer synchronously. $manager->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. L'oggetto di trasferimento è in grado di eseguire trasferimenti in modo asincrono e offre varie opzioni di configurazione che possono essere utilizzate 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'; $manager = new \Aws\S3\Transfer($client, $source, $dest); $manager->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'; $manager = new \Aws\S3\Transfer($client, $source, $dest); $manager->transfer();
Nota

SDK creerà 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'; $manager = new \Aws\S3\Transfer($client, $source, $dest); $manager->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 si fornisce un'iterazione, è necessario fornire un'opzione base_dir nell'associativo $options.

$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 checksum MD5 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'; $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!'; });

La promessa verrà rifiutata se il trasferimento di uno dei file non riesce. È 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 la $reason del rifiuto, che, di solito, è un'istanza di Aws\Exception\AwsException (anche se un valore di qualsiasi tipo può essere distribuito al callback).

$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 dei comandi del gestore dei trasferimenti

È possibile impostare opzioni personalizzate per le operazioni eseguite dalla gestione trasferimenti tramite un callback trasmesso al relativo costruttore.

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