web-dev-qa-db-fra.com

En utilisant PHP télécharger sur Amazon S3

J'ai passé les dernières heures à suivre des didacticiels pour implémenter le téléchargement de fichiers vers Amazon S3 à l'aide de php. J'ai téléchargé la version la plus récente de la classe S3 de Donovan Schönknecht sur mon serveur (en tant que S3.php) et j'essaie d'utiliser le code suivant pour tester la capacité de téléchargement. Je sais que ce code fonctionnera parce que j'ai vu de nombreux exemples en action.

<?php

require('S3.php');

$s3 = new S3('KEY', 'SECRET KEY');

//insert into s3
$new_name = time() . '.txt';

S3::putObject(
'upload-me.txt',
'bucketName',
$new_name,
S3::ACL_PUBLIC_READ,
array(),
array(),
S3::STORAGE_CLASS_RRS

);

?>

Je reçois une erreur de serveur 500 lorsque je tente de charger cette page. En outre, tous les autres tutoriels réputés de cette nature m’ont donné la même erreur 500.

J'ai vérifié la validité de ma clé et de ma clé secrète en me connectant à S3 avec Cyberduck.

Est-ce que quelqu'un a une idée de ce que je pourrais faire de manière incorrecte?

Merci,

Sean

6
Sean

En fin de compte, il manquait l'extension cURL pour PHP, ce qui posait un problème, car la classe S3 que j'utilisais nécessitait l'utilisation de cURL. Tout fonctionne maintenant.

10
Sean

Vous devez également envisager d'utiliser le kit de développement AWS officiel pour PHP . Vous trouverez des exemples d'utilisation de S3 avec le SDK dans leur Guide de l'utilisateur S3 .

8
Jeremy Lindblom

Vous pouvez télécharger la version la plus récente du SDK Amazon PHP en exécutant la commande composer suivante.

composer require aws/aws-sdk-php

Les autres configurations pour télécharger le fichier sur Amazon s3 sont les suivantes

// Include the SDK using the Composer autoloader
require 'vendor/autoload.php';
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

// Set Amazon s3 credentials
$client = S3Client::factory(
  array(
    'key'    => "your-key",
    'secret' => "your secret key"
  )
);

try {
  $client->putObject(array(
    'Bucket'=>'your-bucket-name',
    'Key' =>  'your-filepath-in-bucket',
    'SourceFile' => 'source-filename-with-path',
    'StorageClass' => 'REDUCED_REDUNDANCY'
  ));

} catch (S3Exception $e) {
  // Catch an S3 specific exception.
  echo $e->getMessage();
}

Obtenez des détails étape par étape à partir d'ici Chargement de fichier Amazon S3 à l'aide de PHP

5
Zedd Index

L'exemple suivant a fonctionné pour moi:

<?php
use Aws\S3\S3Client;
use Aws\S3\Exception\S3Exception;

$client = S3Client::factory([
    'version' => 'latest',
    'region'  => 'us-west-1',
    'credentials' => [
        'key'    => "<scret-key>",
        'secret' => "<my-secret>"
    ]
 ]);

try {
    $client->putObject([
        'Bucket'     =>'<my-bucket-name>',
        'Key'        => '<file-name>',
        'SourceFile' => '<file-path-on-server>',    // like /var/www/vhosts/mysite/file.csv
        'ACL'        => 'public-read',
    ]);
} catch (S3Exception $e) {
    // Catch an S3 specific exception.
    echo $e->getMessage();
}

Obtention des informations d'identification de sécurité:

Obtention du code de région

1
Arvind Bhardwaj

Je n'ai jamais trouvé un script mis à jour avec le dernier kit sdk d'Amazon. je l'ai fait par moi-même. il fonctionne comme un script interpréteur en ligne de commande php. Essaie :

https://github.com/arizawan/aiss3clientphp

1
RainWalker

Voici un exemple de code pour télécharger des images sur Amazon S3.

// Bucket Name
$bucket="BucketName";
if (!class_exists('S3'))require_once('S3.php');

    //AWS access info
    if (!defined('awsAccessKey')) define('awsAccessKey', 'ACCESS_KEY');
    if (!defined('awsSecretKey')) define('awsSecretKey', 'ACCESS_Secret_KEY');

    $s3 = new S3(awsAccessKey, awsSecretKey);
    $s3->putBucket($bucket, S3::ACL_PUBLIC_READ);
    if($s3->putObjectFile($tmp, $bucket , $image_name_actual,S3::ACL_PUBLIC_READ) )
    {
        $message = "S3 Upload Successful.";
        $s3file='http://'.$bucket.'.s3.amazonaws.com/'.$actual_image_name;
        echo "<img src='$s3file'/>";
        echo 'S3 File URL:'.$s3file;
    }
    else{
        $message = "S3 Upload Fail.";
    }
}
0
Fiaz Ahmad

Je ne connais pas bien l'API S3, mais je l'ai utilisée comme stockage avec https://github.com/KnpLabs/Gaufrette . Gaufrette est une bibliothèque qui fournit une jolie couche d’abstraction bien au-dessus de S3 et d’autres services/systèmes de fichiers.

0
Ziumin

Utilisez celui-ci pour télécharger des images à l'aide d'un formulaire. Tout fonctionne bien pour vous. Essayez de l'utiliser avec votre code.

$name = $_FILES['photo']['name'];
$size = $_FILES['photo']['size'];
$tmp = $_FILES['photo']['tmp_name'];

//////Upload Process


    // Bucket Name
    $bucket = 'bucket-name';
    require_once('S3.php');

    //AWS access info
    $awsAccessKey = 'awsAccessKey';
    $awsSecretKey = 'awsSecretKey';

    //instantiate the class
    $s3 = new S3($awsAccessKey, $awsSecretKey);

    $s3->putBucket($bucket, S3::ACL_PUBLIC_READ);


    //Rename image name. 
    $actual_image_name = time();

        //Upload to S3
    if($s3->putObjectFile($tmp, $bucket , $actual_image_name, S3::ACL_PUBLIC_READ) )
    {
        $image='http://'.$bucket.'.s3.amazonaws.com/'.$actual_image_name;
    }else{
        echo 'error uploading to S3 Amazon';
    }
0
Youssef Subehi