创建amazon aws s3预签名url PHP时出现问题


Issue creating amazon aws s3 pre signed url PHP

我正试图用S3 PHP SDK生成一个预签名的url请求,如下所示:

$cmd = self::$S3Client->getCommand('GetObject', array('Bucket' => USER_CONTENT_BUCKET_NAME,'Key'    => $key));
$request = self::$S3Client->createPresignedRequest($cmd, '+20 minutes');

*USER_CONTENT_BUCKET_NAME是在constants.php中定义的bucket名称
*$key是字符串键。

如果I var_dump($cmd),我可以看到对象从getCommand()正确返回。

但从createPresignedRequest()调用中,我得到了一个异常-

"Argument 2 passed to Guzzle'Service'Client::getCommand() must be of the type array, object given".

帮助?

问题已解决。

很难理解,因为错误信息无助于理解突出的问题。

这次讨论帮助很大。

亚马逊在他们的3.x PHP api中描述了创建预签名URL的方法,这就是我上面尝试过的方法。

然而,事实证明我们使用的是亚马逊aws的2.8版本。在这种情况下,调用应该是这样的:

$cmd = self::$S3Client->getCommand('GetObject', array('Bucket' => USER_CONTENT_BUCKET_NAME,'Key' => $key));

$presignedUrl = $cmd->createPresignedUrl('+20 minutes');

抛出的Guzzle异常是我所调用的方法不存在的一个症状。

我希望这能帮助其他陷入同样处境的人。