Gestionnaire de transfert Amazon S3 avec AWS SDK for PHP version 3 - AWS SDK for PHP

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

Gestionnaire de transfert Amazon S3 avec AWS SDK for PHP version 3

Le gestionnaire de transfert Amazon S3 intégré au AWS SDK for PHP est utilisé pour charger des répertoires entiers dans un compartiment Amazon S3 et pour télécharger des compartiments entiers dans un répertoire local.

Chargement d'un répertoire local sur Amazon S3

L'objet Aws\S3\Transfer est utilisé pour effectuer des transferts. L'exemple suivant montre comment charger de manière récursive un répertoire local de fichiers dans un compartiment 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();

Dans cet exemple, nous avons créé un client Amazon S3, créé un Transfer objet et effectué le transfert de manière synchrone. L'exemple précédent montre la quantité de code minimale nécessaire pour effectuer un transfert. L'objet de transfert peut effectuer des transferts de manière asynchrone et possède différentes options de configuration que vous pouvez utiliser pour personnaliser les transferts.

Vous pouvez télécharger les fichiers locaux dans un « sous-dossier » d'un compartiment Amazon S3 en fournissant un préfixe de clé dans s3:// l'URI. L'exemple suivant télécharge les fichiers locaux sur le disque pour le compartiment bucket et stocke les fichiers sous le préfixe de clé foo.

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

Téléchargement d'un compartiment Amazon S3

Vous pouvez télécharger de manière récursive un compartiment Amazon S3 vers un répertoire local sur disque en spécifiant l'$sourceargument sous forme d'URI Amazon S3 (par exemple,s3://bucket) et l'$destargument comme chemin d'accès à un répertoire local.

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

Le kit SDK crée automatiquement tous les répertoires nécessaires lors du téléchargement des objets dans le compartiment.

Vous pouvez inclure un préfixe de clé dans l'URI Amazon S3 après le compartiment pour télécharger uniquement les objets stockés dans un « pseudo-dossier ». L'exemple suivant télécharge uniquement les fichiers stockés sous le préfixe de clé « /foo » du compartiment donné.

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

Configuration

Le constructeur de l'objet Transfer accepte les arguments suivants.

$client

L'objet Aws\ClientInterface à utiliser pour effectuer les transferts.

$source(chaîne |Iterator)

Les données source concernées par le transfert. Cela peut pointer vers un chemin local sur le disque (par exemple/path/to/files) ou vers un compartiment Amazon S3 (par exemple,s3://bucket). L'URI s3:// peut également contenir un préfixe de clé qui peut être utilisé pour transférer uniquement les objets dotés d'un préfixe commun.

Si l'$sourceargument est un URI Amazon S3, il doit être un répertoire local (et vice versa). $dest

En plus de fournir une valeur de chaîne, vous pouvez également fournir un objet \Iterator qui génère des noms de fichier absolus. Si vous fournissez un itérateur, vous devez fournir une option base_dir dans le tableau associatif $options.

$dest

La destination de transfert des fichiers. Si l'$sourceargument est un chemin local sur le disque, $dest il doit s'agir d'un URI de compartiment Amazon S3 (par exemple,s3://bucket). Si l'$sourceargument est un URI de compartiment Amazon S3, il doit être un chemin local sur le disque. $dest

$options

Un tableau associatif d’options de transfert. Les options de transfert suivantes sont valides :

add_content_md5 (bool)

Définissez sur pour true calculer la somme de contrôle MD5 pour les téléchargements.

base_dir (chaîne)

Répertoire de base de la source, si $source est un itérateur. Si l'option $source n'est pas un tableau, cette option est ignorée.

before (joignable)

Un rappel à invoquer avant chaque transfert. Les rappels doivent avoir une signature de fonction telle que function (Aws\Command $command) {...}. La commande fournie est une commande GetObject, PutObject, CreateMultipartUpload, UploadPart ou CompleteMultipartUpload.

mup_threshold (int)

Taille en octets pour laquelle il est préférable d'utiliser un chargement partitionné au lieu de PutObject. Sa valeur par défaut est de 16777216 (16 Mo).

concurrency (int, default=5)

Nombre de fichiers à charger simultanément. La valeur de simultanéité idéale varie en fonction du nombre de fichiers en cours de chargement et de la taille moyenne de chaque fichier. En général, les petits fichiers bénéficient d'une simultanéité plus élevée, contrairement aux fichiers plus volumineux.

debug (bool)

Définissez ce paramètre sur true pour imprimer les informations de débogage pour les transferts. Définissez ce paramètre sur une ressource fopen() pour écrire sur un flux spécifique au lieu d'écrire sur STDOUT.

Transferts asynchrones

L'objet Transfer est une instance de GuzzleHttp\Promise\PromisorInterface. Cela signifie que le transfert peut se produire de façon asynchrone et est initié en appelant la méthode de l'objet promise.

$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 promesse sera rejetée si le transfert de l'un des fichiers échoue. Vous pouvez gérer les transferts en échec de façon asynchrone à l'aide de la méthode otherwise de la promesse. La fonction otherwise accepte un rappel pour invoquer lorsqu'une erreur se produit. Le rappel accepte la $reason du rejet, qui sera généralement une instance de Aws\Exception\AwsException (même si une valeur de type any peut être fournie au rappel).

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

Etant donné que l'objet Transfer renvoie une promesse, ces transferts peuvent se produire simultanément avec d'autres promesses asynchrones.

Personnalisation des commandes du gestionnaire de transferts

Vous pouvez définir des options personnalisées sur les opérations exécutées par le gestionnaire de transfert via un rappel transmis à son constructeur.

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