Amazon S3 Transfer Manager mit AWS SDK for PHP Version 3 - AWS SDK for PHP

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Amazon S3 Transfer Manager mit AWS SDK for PHP Version 3

Der Amazon S3 Transfer Manager in der AWS SDK for PHP wird verwendet, um ganze Verzeichnisse in einen Amazon S3-Bucket hochzuladen und ganze Buckets in ein lokales Verzeichnis herunterzuladen.

Hochladen eines lokalen Verzeichnisses in Amazon S3

Das Aws\S3\Transfer-Objekt wird für Übertragungen verwendet. Das folgende Beispiel zeigt, wie Sie ein lokales Dateiverzeichnis rekursiv in einen Amazon S3-Bucket hochladen.

// 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 diesem Beispiel haben wir einen Amazon S3-Client erstellt, ein Transfer Objekt erstellt und die Übertragung synchron durchgeführt. Die Verwendung des vorherigen Beispiels demonstriert den minimalen Code, der für eine Übertragung benötigt wird. Das Übertragungsobjekt kann Übertragungen asynchron durchführen und verfügt über verschiedene Konfigurationsmöglichkeiten, mit denen Sie die Übertragungen anpassen können.

Sie können die lokalen Dateien in einen „Unterordner“ eines Amazon S3-Buckets hochladen, indem Sie ein Schlüsselpräfix in der s3:// URI angeben. Im folgenden Beispiel werden die lokalen Dateien auf dem Datenträger in den bucket-Bucket hochgeladen und die Dateien unter dem Schlüsselpräfix foo gespeichert.

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

Herunterladen eines Amazon S3-Buckets

Sie können einen Amazon S3-Bucket rekursiv in ein lokales Verzeichnis auf der Festplatte herunterladen, indem Sie das $source -Argument als Amazon S3-URI (z. B. s3://bucket) und das $dest -Argument als Pfad zu einem lokalen Verzeichnis angeben.

// 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();
Anmerkung

Das SDK erstellt automatisch alle erforderlichen Verzeichnisse, wenn Sie Objekte in den Bucket herunterladen.

Sie können nach dem Bucket ein Schlüsselpräfix in den Amazon S3-URI einfügen, um nur Objekte herunterzuladen, die unter einem „Pseudoordner“ gespeichert sind. Das folgende Beispiel lädt nur Dateien herunter, die unter dem Schlüsselpräfix „/ foo“ des betreffenden Buckets gespeichert sind.

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

Konfiguration

Der Transfer-Objektkonstruktor akzeptiert die folgenden Argumente:

$client

Das Aws\ClientInterface-Objekt für die Ausführung der Übertragungen.

$source (Zeichenfolge | Iterator)

Die zu übertragenden Quelldaten. Dies kann auf einen lokalen Pfad auf der Festplatte (z. B. /path/to/files) oder auf einen Amazon S3-Bucket (z. B. s3://bucket) verweisen. Die s3://-URI kann auch ein Schlüsselpräfix enthalten, das verwendet werden kann, um nur Objekte unter einem gemeinsamen Präfix zu übertragen.

Wenn das $source Argument ein Amazon S3-URI ist, muss das $dest Argument ein lokales Verzeichnis sein (und umgekehrt).

Neben der Bereitstellung eines Zeichenfolgenwerts können Sie auch ein \Iterator-Objekt angeben, das absolute Dateinamen erzeugt. Wenn Sie einen Iterator bereitstellen, müssen Sie eine base_dir-Option im assoziativen Array $options bereitstellen.

$dest

Das Ziel, an das die Dateien übertragen werden. Wenn das $source Argument ein lokaler Pfad auf der Festplatte ist, $dest muss ein Amazon S3-Bucket-URI sein (z. B. s3://bucket). Wenn das Argument ein Amazon S3$source-Bucket-URI ist, muss das $dest Argument ein lokaler Pfad auf der Festplatte sein.

$options

Ein assoziatives Array mit Übertragungsoptionen. Die folgenden Übertragungsoptionen sind gültig:

add_content_md5 (bool)

Legen Sie den Wert auf festtrue, um die MD5-Prüfsumme für Uploads zu berechnen.

base_dir (string)

Basisverzeichnis der Quelle, wenn $source ein Iterator ist. Wenn die $source-Option kein Array ist, wird diese Option ignoriert.

before (aufrufbar)

Ein Callback, der vor jeder Übertragung aufgerufen wird. Der Callback sollte eine Funktionssignatur wie function (Aws\Command $command) {...} haben. Der bereitgestellte Befehl ist GetObjectPutObject, CreateMultipartUpload, UploadPart oder CompleteMultipartUpload.

mup_threshold (int)

Größe in Bytes, für die ein mehrteiliger Upload statt PutObject verwendet werden soll. Standardwert 16777216 (16 MB).

concurrency (int, default=5)

Anzahl der Dateien, die gleichzeitig hochgeladen werden. Die ideale Nebenläufigkeitswert variiert abhängig von der Anzahl der Dateien, die hochgeladen werden, und der durchschnittlichen Größe der einzelnen Datei. Im Allgemeinen profitieren kleinere Dateien von einer höheren Nebenläufigkeit, während größere Dateien dies nicht tun.

debug (bool)

Auf true setzen, um Debugging-Informationen für Übertragungen auszugeben. Auf eine fopen()-Ressource setzen, um statt auf STDOUT in einen bestimmten Stream zu schreiben.

Asynchrone Übertragungen

Das Transfer-Objekt ist eine Instance von GuzzleHttp\Promise\PromisorInterface. Das bedeutet, dass die Übertragung asynchron stattfinden kann und durch Aufruf der promise-Methode des Objekts ausgelöst wird.

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

Das Promise wird abgelehnt, wenn eine der Dateien nicht übertragen werden kann. Sie können die fehlgeschlagene Übertragung asynchron unter Verwendung der otherwise-Methode des Promise verarbeiten. Die otherwise-Funktion akzeptiert einen Callback, der aufgerufen wird, wenn ein Fehler auftritt. Der Callback akzeptiert die $reason für die Ablehnung, die in der Regel eine Instance von Aws\Exception\AwsException ist (allerdings kann dem Callback ein Wert eines beliebigen Typs übergeben werden).

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

Da das Transfer-Objekt ein Promise zurückgibt, können diese Übertragungen gleichzeitig mit anderen asynchronen Promises stattfinden.

Anpassen der Befehle des Transfer Managers

Benutzerdefinierte Optionen können auf die vom Transfer Manager ausgeführten Operationen über einen Callback festgelegt werden, der an seinen Konstruktor übergeben wird.

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