我正在将使用aws-php-sdk v2
的系统升级到aws-php-sdk v3
。
在v2
中,我有类似的东西:
$this->s3->upload($bucket, $key, $file, 'public-read');
//Where $this->s3 is a S3Client instance (from the SDK).
效果很好。
现在,升级到aws-php-sdk v3
后,它会引发错误:
在“ https://s3.region.amazonaws.com/folder/file.ext”上执行“ PutObject”时出错。
客户端错误:
PUT https://s3.region.amazonaws.com/folder/file.ext
导致403 Forbidden
响应我们计算出的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。
我使用的是与v2
系统中使用的相同的accessKey和机密。
据我所知,是负责签名计算的PHP SDK。由于我没有手动进行任何计算。
我做错了什么?有什么解决方法的想法吗?
答案 0 :(得分:0)
刚找到我问题的答案。
问题是:在aws-php-sdk v2
中,我有以下代码:
$bucket = "mybucketname/myfolder";
$key = "myfilename.jpg";
$upload = $this->app->S3->upload($bucket, $key, fopen( $local , 'rb'), 'public-read');
这很好用,并且没有显示任何警告/错误,但是升级到aws-php-sdk v3
时不起作用。
我只是将$bucket
和$key
的值更改为:
$bucket = "mybucketname";
$key = "myfolder/myfilename.jpg";
$upload = $this->app->S3->upload($bucket, $key, fopen( $local , 'rb'), 'public-read');
它确实有效!
真的很奇怪,它在v2
中没有抱怨,但在v3
中却没有抱怨。