Posted in

Laravel uso de S3 para guardar archivos mediante SDK

Para guardar y leer archivos en S3 desde Laravel usaremos el paquete AWS SDK for PHP. Disponible para Laravel 4 y Laravel 5.

Para subir archivos:

$file = Input::file('file');
$bucket = 'bucketname';
$s3 = AWS::get('s3');
$s3->putObject(array(
  'Bucket'     => $bucket,
  'Key'        => $file->getClientOriginalName(),
  'SourceFile' => $file->getPathName(), // or local file: public_path() . '/file.gif',
  'ContentType' => $creativity->mime_type, // Esta linea hace que cuando linkamos a este archivo desde un html nos lo muestre y no fuerce su descarga
  'ContentDisposition' => 'inline; filename=' . $creativity->original_filename,
  'ACL'    => 'public-read' // para que sea de acceso publico
));

Para listar todos los archivos de un bucket

$bucket = 'bucketname';
$s3 = AWS::get('s3');
$objects = $s3->getPaginator('ListObjects', [
  'Bucket' => $bucket
]);

echo "Keys retrieved!" . PHP_EOL;
foreach ($objects as $object) {
  echo $object['Key'] . PHP_EOL;
}

Para listar archivos de un bucket (esta opción solo lista los primeros 1000 archivos):

$bucket = 'bucketname';
$s3 = AWS::get('s3');
$result = $s3->listObjects([
  'Bucket' => $bucket
])
foreach ($result['Contents'] as $object) {
  echo $object['Key'] . PHP_EOL;
}

Para obtener información de un archivo:

$bucket = 'bucketname';
$s3 = AWS::get('s3');
$result = $s3->getObject([
  'Bucket' => $bucket,
  'Key'    => 'carpeta/signatura.gif'
]);
print_r($result);

Eliminar un archivo

$bucket = 'bucketname';
$s3 = AWS::get('s3');
$s3->deleteObject([
    'Bucket' => $bucket,
    'Key'    => $keyname
]);

Eliminar varios archivos

$bucket = 'bucketname';
$s3 = AWS::get('s3');

// 1. List the objects and get the keys.
$keys = $s3->listObjects([
    'Bucket' => $bucket
]) ->getPath('Contents/*/Key');

// 2. Delete the objects.
$s3->deleteObjects([
    'Bucket'  => $bucket,
    'Delete' => [
        'Objects' => array_map(function ($key) {
            return ['Key' => $key];
        }, $keys)
    ],
]);

Copiar archivos de S3 a S3

$s3->copyObject([
                'Bucket'     => Config::get('app.tasks_bucketname'), // bucketname de destino
                'Key'        => $s3_key, // destino
                'CopySource' => Config::get('app.tasks_bucketname') . '/' . $crea->s3_key, // archivo origen, concatenamos en la url al inicio el bucketname
                'ACL'    => 'public-read'
            ]);

Deixa un comentari

L'adreça electrònica no es publicarà. Els camps necessaris estan marcats amb *


The reCAPTCHA verification period has expired. Please reload the page.