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
(Iterator
stringa |) -
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'URIs3://
può contenere anche una chiave del prefisso che può essere utilizzata solo per il trasferimento di oggetti con un prefisso comune.Se l'
$source
argomento è un URI Amazon S3, l'$dest
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'opzionebase_dir
nell'associativo$options
. -
$dest
-
La destinazione in cui i file verranno trasferiti. Se l'
$source
argomento è un percorso locale su disco,$dest
deve essere un URI del bucket Amazon S3 (ad esempio).s3://bucket
Se l'$source
argomento è un URI del bucket Amazon S3, l'$dest
argomento 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
oCompleteMultipartUpload
. -
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 risorsafopen()
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'; } }, ]);