0

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

当我的文件的权限设置为被授权者时,以下内容有效:所有人(公共读取),但不是其他方式。(我已经为我的存储桶设置了总体策略,以限制对某些域的访问,包括我现在正在测试的本地主机):

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

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

4

2 回答 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 客户端,如图所示。

于 2016-06-28T12:37:04.323 回答
0

您可能应该先在本地下载图像,然后再尝试在 Imagick 中使用它。您可以使用适用于 PHP 的 AWS 开发工具包通过如下代码执行此操作:

$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 的S3 用户指南中了解有关如何使用 S3 客户端的更多信息。

于 2013-04-29T17:40:26.703 回答