我不明白为什么这不起作用,我搜索了互联网,找不到任何与我使用的特定命令匹配的东西。
我基本上是在尝试从AmazonS3生成一个预签名的URL,我按照文档中的指示生成T,但它不起作用。。实际上不是对T,我是对T做的。文档说要把数组做成这样:['Key'=>'Value']。。。我在这里看到了另一个问题,解决的答案是使用array()。。。。但它不会改变任何事情。
它仍然给出这个错误:
[01-Jan-2016 13:28:56 America/Loss_Angeles]PHP可捕获的致命错误:传递给Guzzle''Service''Client::getCommand()的参数2必须是数组类型,给定对象,在第76行的/Users/alex/Development/thrineofdionysus.com/vendor/guzzle/guzzle/src/Guzle/Service/Client.php中调用,并在第79行的/Uusers/alex/Development/thrineOFdionysus com/vendor/gazzle/guuzzle/src/guzzle/Service/Client.php中定义
这是我正在使用的与S3部分相关的代码。当我看到关于键、区域和bucket的常量是正确的时,请相信我,因为我还有其他S3代码在其他地方使用它们,它们可以完美地工作。
<?php
$s3 = Aws'S3'S3Client::factory(array(
'key' => AWS_ACCESS_KEY,
'secret' => AWS_SECRET_KEY,
'region' => AWS_REGION,
));
$cmd = $s3->getCommand('GetObject', array(
'Bucket' => AWS_BUCKET,
'Key' => $row['video_id']
));
$request = $s3->createPresignedRequest($cmd, '+120 minutes');
$url = (string) $request->getUri();
?>
我还知道$row['video_id']等于一个现有的文件名,因为如果没有这段代码,我会把它回显出来,这就是正确的文件名。
这是我的composer.json:
{
"require": {
"aws/aws-sdk-php": "2.*",
"php": ">=5.2.0"
}
}
这是我在另一个页面上的亚马逊代码,运行良好:
$s3 = Aws'S3'S3Client::factory(array(
'key' => AWS_ACCESS_KEY,
'secret' => AWS_SECRET_KEY,
'region' => AWS_REGION
));
$objects = $s3->getIterator('ListObjects', array('Bucket' => AWS_BUCKET));
foreach ($objects as $object) {
echo '<option value="' . $object['Key'] . '">' . $object['Key'] . '</option>' . PHP_EOL;
}
看起来您遵循的是v3指南,但安装了v2。您可以通过调用:$url = $s3->getObjectUrl(AWS_BUCKET, $row['video_id'], '+120 minutes');
在v2中创建预签名的URL
完整的指南可以在这里找到。