Saltar al contenido

Obtenga la URL firmada del archivo de amazon s3 usando el sistema de archivos Laravel 5.2

Solución:

En Laravel,

$s3 = Storage::disk('s3');
$client = $s3->getDriver()->getAdapter()->getClient();
$expiry = "+10 minutes";

$command = $client->getCommand('GetObject', [
    'Bucket' => Config::get('filesystems.disks.s3.bucket'),
    'Key'    => "file/in/s3/bucket"
]);

$request = $client->createPresignedRequest($command, $expiry);

return (string) $request->getUri();

Asegúrese de tener también el paquete AWS for flysystem composer (la versión variará):

"league/flysystem-aws-s3-v3": "1.0.9"

Para Laravel 5.5 y versiones posteriores, ahora puede usar URL temporales / URL preestablecidas de s3.

use Storage;

// Make sure you have s3 as your disk driver
$url = Storage::disk('s3')->temporaryUrl(
   'file1.jpg', Carbon::now()->addMinutes(5)
);

Esto solo funciona para el controlador de almacenamiento s3 AFAIK.

https://laravel.com/docs/5.5/filesystem#retrieving-files

Después de muchos errores, por fin, encontré la solución para acceder al contenido privado del cubo s3 usando el siguiente código:

use Storage;
use Config;

$client = Storage::disk('s3')->getDriver()->getAdapter()->getClient();
$bucket = Config::get('filesystems.disks.s3.bucket');

$command = $client->getCommand('GetObject', [
    'Bucket' => $bucket,
    'Key' => '344772707_360.mp4'  // file name in s3 bucket which you want to access
]);

$request = $client->createPresignedRequest($command, '+20 minutes');

// Get the actual presigned-url
echo $presignedUrl = (string)$request->getUri();
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *