繁体   English   中英

AWS S3得到预先签名的URL Guzzle“参数必须是类型数组,对象给定”当它是一个数组时

[英]AWS S3 getting presigned URL Guzzle “argument must be of type array, object given” when it's an array

我不明白为什么这不起作用,我已经搜索了互联网,找不到与我正在使用的特定命令相匹配的任何内容。

我基本上是在尝试从Amazon S3生成一个预先签名的URL,我正在按照文档中的指示进行操作,但是它不起作用。实际上不是T,我是这样做的。文档说要做到像这样的数组:['Key'=>'Value'] ...我在这里看到另一个问题,解决的答案是使用array()....但它不会改变任何东西。

它仍然会出现此错误:

[01-Jan-2016 13:28:56 America / Los_Angeles] PHP Catchable致命错误:参数2传递给Guzzle \\ Service \\ Client :: getCommand()必须是类型数组,给定对象,在/ Users / alex中调用第76行的/Development/theshrineofdionysus-com/vendor/guzzle/guzzle/src/Guzzle/Service/Client.php并在/ Users / alex / Development / theshrineofdionysus-com / vendor / guzzle / guzzle / src / Guzzle / Service中定义第79行的/Client.php

这是我使用的与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 minutes');

一个完整的指南,可以发现在这里

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM