php-AWS S3获得预签名URL时,“自变量必须是数组类型,给定对象”是数组
作者:互联网
我不明白为什么这行不通,而且我搜寻了Internet并且找不到与我使用的特定命令匹配的任何内容.
我基本上是想从Amazon S3生成一个预签名的URL,我正在按照文档中的指示操作到T,但它不起作用.实际上不是到T,我正在对T进行操作.像这样的数组:[‘Key’=> ‘Value’] …我在这里看到另一个问题,解决的答案是使用array()….但它没有任何改变.
它仍然给出此错误:
[01-Jan-2016 13:28:56 America/Los_Angeles] PHP Catchable fatal error: Argument 2 passed to Guzzle\Service\Client::getCommand() must be of the type array, object given, called in /Users/alex/Development/theshrineofdionysus-com/vendor/guzzle/guzzle/src/Guzzle/Service/Client.php on line 76 and defined in /Users/alex/Development/theshrineofdionysus-com/vendor/guzzle/guzzle/src/Guzzle/Service/Client.php on line 79
这是我正在使用的与它的S3部分相关的代码.当我看到有关键,区域和存储桶的常量正确时,请相信我,因为我还有其他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.您可以通过调用以下命令在v2中创建一个预签名的URL:$url = $s3-> getObjectUrl(AWS_BUCKET,$row [‘video_id’],’120分钟’);
可以找到here的完整指南.
标签:amazon-web-services,amazon-s3,php 来源: https://codeday.me/bug/20191119/2034523.html