我正试图用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异常是我所调用的方法不存在的一个症状。
我希望这能帮助其他陷入同样处境的人。