使用Imagick PHP从Amazon S3读取私有身份验证图像

问题描述 投票:0回答:2

我对Amazon S3和Imagick PHP库都相当新,但到目前为止我已经能够实现我想要的东西(即:上传文件并生成一系列缩略图)。目前,我很想确定Imagick是否可以从S3读取经过身份验证的图像。我希望能够这样做,以便回读原始图像进行编辑。

当我的文件的权限设置为被授予者时,以下工作:Everyone(公共读取),但不是。 (我已经为我的存储桶设置了整体策略,以限制只访问某些域,包括我现在正在测试的localhost):

$sourcePath = "https://s3.amazonaws.com/myBucket/folder/exampleFile-9203914980.43.jpg";
$image = new Imagick($sourcePath);

上面的代码无法执行。 S3或Imagick中是否有任何设置可以读取图像?在此先感谢您的帮助!

php amazon-s3 acl imagick
2个回答
2
投票

我设法避免在使用S3 Stream Wrapper创建Imagick对象之前保存图像:

https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/s3-stream-wrapper.html

$client->registerStreamWrapper();
$data = file_get_contents('s3://bucket/key');
$im = new Imagick();
$im->readImageBlob($data);

$ client与Jeremy Lindblom的答案中的$ s3相同 - 你需要先创建一个S3客户端,如图所示。


0
投票

您应该在尝试使用Imagick中的图像之前在本地下载图像。您可以使用AWS SDK for PHP执行此操作,如下所示:

$s3 = Aws\S3\S3Client::factory(array(
    'key'    => '<your-aws-access-key-id>',
    'secret' => '<your-aws-secret-key>'
));

$bucket = 'myBucket';
$key = 'folder/exampleFile-9203914980.43.jpg';
$tempImage = '/tmp/' . $bucket . '/' . $key;

$s3->getObject(array(
    'Bucket' => $bucket,
    'Key'    => $key,
    'SaveAs' => $tempImage
));

$image = new Imagick($tempImage);

// do stuff
// ...

unlink($tempImage);

您可以在SDK的user guide for S3上了解有关如何使用S3客户端的更多信息。

© www.soinside.com 2019 - 2024. All rights reserved.