我对Amazon S3和Imagick PHP库都相当陌生,但到目前为止已经能够完成我想要的(即:上传文件和生成一系列缩略图图像)。目前,我正在确定Imagick是否有可能从S3读取经过身份验证的映像。我希望能够做到这一点,以便在原始图像中进行编辑。
当我的文件的权限被设置为grant时:Everyone (public read), but not else。(我已经为我的桶设置了总体策略,以限制仅对某些域的访问,包括我现在正在测试的localhost):
$sourcePath = "https://s3.amazonaws.com/myBucket/folder/exampleFile-9203914980.43.jpg";
$image = new Imagick($sourcePath);
上面的代码执行失败。S3或Imagick中是否有允许读取图像的设置?提前感谢您的帮助!
通过使用S3流包装器,我设法避免在创建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客户端,如图所示。
在尝试在Imagick中使用它之前,您可能应该在本地下载该图像。您可以使用PHP的AWS SDK来执行此操作,代码如下:
$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);
您可以在S3的SDK用户指南中了解有关如何使用S3客户端的更多信息。