📅  最后修改于: 2023-12-03 15:08:47.775000             🧑  作者: Mango
在使用 Amazon S3 存储资源时,可以将其设置为私有,以确保只有授权的用户才可以访问。如果您想在 Laravel 中访问私有图像,您需要在 S3 上读取私有图像,并使用签名 URL 进行访问。
以下是在 S3 Laravel 中获取私有图像的步骤:
在 Laravel 中使用 Amazon S3 存储驱动程序,您需要安装 “league/flysystem-aws-s3-v3” 包,使用 Composer 运行以下命令:
composer require league/flysystem-aws-s3-v3
在 Laravel 中使用 Amazon S3 驱动程序,您需要在 config/filesystems.php
文件中配置 S3 驱动程序选项。打开该文件并添加以下行:
's3' => [
'driver' => 's3',
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
'region' => env('AWS_DEFAULT_REGION'),
'bucket' => env('AWS_BUCKET'),
'url' => env('AWS_URL'),
],
在 Laravel 中读取 S3 上的私有图像,您可以首先从要读取的私有文件位置创建一个 “league/flysystem-aws-s3-v3” 驱动程序实例。然后,您可以使用此实例的 getAdapter()
方法获取 AWS S3 SDK 的实例,并从私有文件位置获取图像。
以下是读取 S3 上的私有图像的示例代码:
use League\Flysystem\Filesystem;
use League\Flysystem\AwsS3v3\AwsS3Adapter;
use Aws\S3\S3Client;
$s3 = new S3Client([
'credentials' => [
'key' => env('AWS_ACCESS_KEY_ID'),
'secret' => env('AWS_SECRET_ACCESS_KEY'),
],
'region' => env('AWS_DEFAULT_REGION'),
'version' => 'latest',
]);
$adapter = new AwsS3Adapter($s3, env('AWS_BUCKET'));
$filesystem = new Filesystem($adapter);
$imagePath = 'private/path/to/image.jpg';
$image = $filesystem->read($imagePath);
上面的代码假定您已经在 .env
文件中设置了 AWS 访问密钥,区域,存储桶和要读取的私有图像路径。
在 Laravel 中获取 Amazon S3 上的私有图像时,您需要生成签名 URL,并将其用作图像的访问链接。您可以使用 getTemporaryUrl()
方法生成签名 URL。
以下是获取私有图像 URL 的示例代码:
use Carbon\Carbon;
$imagePath = 'private/path/to/image.jpg';
$expiresAt = Carbon::now()->addMinutes(5);
$signedUrl = $filesystem->getAdapter()->getClient()->getObjectUrl(env('AWS_BUCKET'), $imagePath, $expiresAt);
上面的代码假定您已经在 .env
文件中设置了 AWS 访问密钥,区域,存储桶和要读取的私有图像路径。
在上面的代码中, Carbon::now()->addMinutes(5)
用于指定 URL 的有效期。在此示例中,URL 将在 5 分钟后过期。
到此为止,您已经学会了在 S3 Laravel 中获取私有图像的步骤。首先,您需要安装和配置 S3 驱动程序。然后,您需要使用 “league/flysystem-aws-s3-v3” 驱动程序实例来读取私有图像。最后,您需要使用 getObjectUrl()
方法生成签名 URL,并将其用作图像的访问链接。