Ejemplo de código de SDK de AWS PHP v3

No se recomienda almacenar credenciales en un archivo ejecutable. Una mejor opción es cargar credenciales desde 'environment variables' o desde un 'credentials ini file'. Visita el siguiente sitio para obtener más detalles:

Crear una conexión

Crear un cliente S3 de un objeto para interactuar con el servidor DHO:

define('AWS_KEY', 'your_access_key');
define('AWS_SECRET_KEY', 'your_secret_key');
define('HOST', 'https://objects-us-east-1.dream.io');
define('REGION', 'us-east-1');

// require the AWS SDK for PHP library
require 'aws-autoloader.php';

use Aws\S3\S3Client;

// Establish connection with DreamObjects with an S3 client.
$client = new Aws\S3\S3Client([
    'version'     => '2006-03-01',
    'region'      => REGION,
    'endpoint'    => HOST,
        'credentials' => [
        'key'      => AWS_KEY,
        'secret'   => AWS_SECRET_KEY,
    ]
]);

Enlistar Buckets propios

Enlista los buckets poseídos por el usuario S3:

$buckets = $client->listBuckets();
try {
    foreach ($buckets['Buckets'] as $bucket){
        echo "{$bucket['Name']}\t{$bucket['CreationDate']}\n";
    }
} catch (S3Exception $e) {
    echo $e->getMessage();
    echo "\n";
}

La respuesta aparece similar a lo siguiente:

mahbuckat1   2011-04-21T18:05:39.000Z
mahbuckat2   2011-04-21T18:05:48.000Z
mahbuckat3   2011-04-21T18:07:18.000Z

Crear un Bucket

$BUCKET_NAME='my-new-bucket';
try {
    $result = $client->createBucket([
        'Bucket' => $BUCKET_NAME,
    ]);
} catch (S3Exception $e) {
    // output error message if fails
    echo $e->getMessage();
    echo "\n";
}

Enlistar los contenidos de un Bucket

$objects = $client->listObjectsV2([
        'Bucket' => 'my-new-bucket',
]);
foreach ($objects['Contents'] as $object){
    echo "{$object['Key']}\t{$object['LastModified']}\n";
}

La respuesta aparece similar a lo siguiente si el bucket contiene contiene algún archivo:

myphoto1.jpg 251262  2011-08-08T21:35:48.000Z
myphoto2.jpg 262518  2011-08-08T21:38:01.000Z

Eliminar todos los contenidos de un Bucket

$batch = Aws\S3\BatchDelete::fromListObjects($client, ['Bucket' => 'my-new-bucket']);
$batch->delete();

Eliminar un Bucket

El Bucket debe estar vacío, si no la siguiente llamada no funcionará.

$client->deleteBucket(array('Bucket' => 'my-new-bucket'));

Crear un object

Sube un archivo desde el sistema de archivos y lo configura como 'private' o privado:

$bucket = 'my-bucket-name';
$file_Path = './hello.txt';
$key = basename($file_Path);
try{
    $result = $client->putObject([
        'Bucket'     => $bucket,
        'Key'        => $key,
        'SourceFile' => $file_Path,
        'ACL'        => 'private',
    ]);
} catch (S3Exception $e) {
    echo $e->getMessage() . "\n";
}

Cambiar un Access Control List (ACL) de un objeto

Cambia la disponibilidad del object hello.txt a 'publicly readable', un object secret_plans.txt a 'private'.

$client->putObjectAcl(array(
    'Bucket' => 'my-bucket-name',
    'Key'    => 'hello.txt',
    'ACL'    => 'public-read'
));
$client->putObjectAcl(array(
    'Bucket' => 'my-bucket-name',
    'Key'    => 'secret_plans.txt',
    'ACL'    => 'private'
));

Una ACL puede ser privada, de lectura pública, de lectura pública y de escritura, de lectura autenticada, de lectura del propietario del depósito o de control total del propietario del depósito. Consulta lo siguiente para obtener más información:

Eliminar un object

Elimina el object goodbye.txt:

$client->deleteObject(array(
    'Bucket' => 'my-bucket-name',
    'Key'    => 'goodbye.txt',
));

Descargar un object a un archivo

Descarga el object poetry.pdf de ‘my-bucket-name’ y lo guarda en /home/username/documents. . Asegúrate de cambiar username a tu usuario Shell.

$client->getObject(array(
    'Bucket' => 'my-bucket-name',
    'Key'    => 'poetry.pdf',
    'SaveAs' => '/home/username/documents/poetry.pdf'
));

Generar una URL de descarga de objects (sin firmar y pre-firmado)

Genera una URL sin firmar para hello.txt. Esto funciona por que hello.txt se hizo público configurando la ACL anterior, que luego genera una URL de descarga firmada para secret_plans.txt que funciona durante 1 hora. Las URL de descarga firmadas funcionan durante el período de tiempo, incluso si el objeto es privado (cuando finaliza el período de tiempo, la URL deja de funcionar):

$plain_url = $client->getObjectUrl('my-bucket-name', 'hello.txt');
echo $plain_url . "\n";

$cmd = $client->getCommand('GetObject', [
        'Bucket' => 'my-bucket-name',
        'Key'    => 'secret_plans.txt'
]);
$signed_url = $client->createPresignedRequest($cmd, '+1 hour');
echo $signed_url->getUri() . "\n";

La respuesta aparece similar a lo siguiente:

https://my-bucket-name.objects-us-east-1.dream.io/hello.txt
https://my-bucket-name.objects-us-east-1.dream.io/secret_plans.txt?Signature=XXXXXXXXXXXXXXXXXXXXXXXXXXX&Expires=1316027075&AWSAccessKeyId=XXXXXXXXXXXXXXXXXXX

¿Este artículo ha respondido sus preguntas?

Última actualización el PST.

¿Aún no encuentra lo que busca?