📜  如何在 s3 laravel 中获取私有图像 - PHP (1)

📅  最后修改于: 2023-12-03 15:08:47.775000             🧑  作者: Mango

如何在 S3 Laravel 中获取私有图像 - PHP

在使用 Amazon S3 存储资源时,可以将其设置为私有,以确保只有授权的用户才可以访问。如果您想在 Laravel 中访问私有图像,您需要在 S3 上读取私有图像,并使用签名 URL 进行访问。

以下是在 S3 Laravel 中获取私有图像的步骤:

步骤1:安装 S3 驱动程序

在 Laravel 中使用 Amazon S3 存储驱动程序,您需要安装 “league/flysystem-aws-s3-v3” 包,使用 Composer 运行以下命令:

composer require league/flysystem-aws-s3-v3
步骤2:配置 S3 驱动程序

在 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'),
],
步骤3:读取 S3 上的私有图像

在 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 访问密钥,区域,存储桶和要读取的私有图像路径。

步骤4:获取私有图像 URL

在 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,并将其用作图像的访问链接。