Amazon S3 pré-signé POSTs avec la 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.

Amazon S3 pré-signé POSTs avec la AWS SDK for PHP version 3

Tout comme le pré-signéURLs, le pré-signé vous POSTs permet de donner un accès d'écriture à un utilisateur sans lui donner AWS d'informations d'identification. Les POST formulaires pré-signés peuvent être créés à l'aide d'une instance d'AWSs3 V4. PostObject

Les exemples suivants montrent comment :

  • Obtenez des données pour un formulaire de POST téléchargement d'objets S3 à l'aide de la version PostObjectV4.

Tous les exemples de code pour le AWS SDK for PHP sont disponibles ici GitHub.

Informations d’identification

Note

PostObjectV4ne fonctionne pas avec les informations d'identification provenant de AWS IAM Identity Center.

Avant d'exécuter l'exemple de code, configurez vos AWS informations d'identification, comme décrit dansInformations d’identification. Importez ensuite le AWS SDK for PHP, comme décrit dansUtilisation de base.

Créez la PostObject V4

Pour créer une instance PostObjectV4, vous devez fournir les informations suivantes :

  • Instance de Aws\S3\S3Client

  • Compartiment

  • Tableau associatif des champs de saisie du formulaire

  • ensemble de conditions de politique (voir Construction des politiques dans le guide de l'utilisateur d'Amazon Simple Storage Service)

  • Délai d'expiration de la chaîne pour la stratégie (facultatif, une heure par défaut).

Importations

require '../vendor/autoload.php'; use Aws\S3\PostObjectV4; use Aws\S3\S3Client;

Exemple de code

require '../vendor/autoload.php'; use Aws\S3\PostObjectV4; use Aws\S3\S3Client; $client = new S3Client([ 'profile' => 'default', 'region' => 'us-east-1', ]); $bucket = 'amzn-s3-demo-bucket10'; $starts_with = 'user/eric/'; $client->listBuckets(); // Set defaults for form input fields. $formInputs = ['acl' => 'public-read']; // Construct an array of conditions for policy. $options = [ ['acl' => 'public-read'], ['bucket' => $bucket], ['starts-with', '$key', $starts_with], ]; // Set an expiration time (optional). $expires = '+2 hours'; $postObject = new PostObjectV4( $client, $bucket, $formInputs, $options, $expires ); // Get attributes for the HTML form, for example, action, method, enctype. $formAttributes = $postObject->getFormAttributes(); // Get attributes for the HTML form values. $formInputs = $postObject->getFormInputs(); ?> <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> <title>PHP</title> </head> <body> <form action="<?php echo $formAttributes['action'] ?>" method="<?php echo $formAttributes['method'] ?>" enctype="<?php echo $formAttributes['enctype'] ?>"> <label id="key"> <input hidden type="text" name="key" value="<?php echo $starts_with ?><?php echo $formInputs['key'] ?>"/> </label> <h3>$formInputs:</h3> acl: <label id="acl"> <input readonly type="text" name="acl" value="<?php echo $formInputs['acl'] ?>"/> </label><br/> X-Amz-Credential: <label id="credential"> <input readonly type="text" name="X-Amz-Credential" value="<?php echo $formInputs['X-Amz-Credential'] ?>"/> </label><br/> X-Amz-Algorithm: <label id="algorithm"> <input readonly type="text" name="X-Amz-Algorithm" value="<?php echo $formInputs['X-Amz-Algorithm'] ?>"/> </label><br/> X-Amz-Date: <label id="date"> <input readonly type="text" name="X-Amz-Date" value="<?php echo $formInputs['X-Amz-Date'] ?>"/> </label><br/><br/><br/> Policy: <label id="policy"> <input readonly type="text" name="Policy" value="<?php echo $formInputs['Policy'] ?>"/> </label><br/> X-Amz-Signature: <label id="signature"> <input readonly type="text" name="X-Amz-Signature" value="<?php echo $formInputs['X-Amz-Signature'] ?>"/> </label><br/><br/> <h3>Choose file:</h3> <input type="file" name="file"/> <br/><br/> <h3>Upload file:</h3> <input type="submit" name="submit" value="Upload to Amazon S3"/> </form> </body> </html>