我对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中是否有任何设置可以读取图像?在此先感谢您的帮助!
我设法避免在使用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客户端,如图所示。
您应该在尝试使用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客户端的更多信息。