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