Amazon S3 Transfer ManagerAWS SDK for PHPVersione 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à.

Amazon S3 Transfer ManagerAWS SDK for PHPVersione 3

Amazon S3 Transfer ManagerAWS SDK for PHPviene utilizzata per caricare intere directory in un bucket Amazon S3 e per scaricare interi bucket in una directory locale.

Caricamento di una directory locale in 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 source 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, è stato creato un client Amazon S3 e unTransferoggetto, 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.

È possibile caricare i file locali in una «sottocartella» di un bucket Amazon S3 fornendo un key prefix nell's3://URI. 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();

Download di un bucket Amazon S3

È possibile scaricare in modo ricorsivo un bucket Amazon S3 in una directory locale su disco specificando$sourceargomento come URI Amazon S3 (ad es.s3://bucket) e il$destargomento 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.

È possibile includere un key prefix nell'URI 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 (stringa|``Iterazione``)

I dati di origine in fase di trasferimento. Può puntare a un percorso locale su disco (ad esempio/path/to/files) o un bucket Amazon S3 (ad esempios3://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 il file$sourceargomento è un URI Amazon S3, il$destl'argomento 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 il file$sourceargument è un percorso locale su disco,$destdeve essere un URI bucket Amazon S3 (ad es.s3://bucket). Se il file$sourceargomento è un URI di un bucket Amazon S3, il$destl'argomento deve essere un percorso locale su disco.

$options

Un array associativo delle opzioni di trasferimento.

Opzioni di trasferimento

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