9

我正在为 Amazon S3 和 CloudFront- Link使用 PHP 类。但是当我尝试将文件上传到存储桶中时,我收到此错误:

[SignatureDoesNotMatch] 我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。

如何解决?

谢谢。

4

4 回答 4

9

当您注册亚马逊时,您可以为自己创建一个密钥对(亚马逊称这些访问密钥 ID 和秘密访问密钥)。

这两个用于签署对亚马逊网络服务的请求。亚马逊会重新计算签名并比较它是否与您请求中包含的签名匹配。这样,秘密访问密钥就不需要通过网络传输。

如果您收到“签名不匹配”,很可能您使用了错误的秘密访问密钥。您可以仔细检查访问密钥和秘密访问密钥以确保它们正确吗?

于 2012-05-03T13:55:24.897 回答
5

就我个人而言,由于我的元数据中的字符,我收到了这个错误。

有问题的字符是“-”字符,它在 unicode 中是“\u2013”​​,与“-”不同。

$result = $s3->putObject(array(
    'Bucket'       => $bucket,
    'Key'          => $keyname,
    'Metadata' => [
        'name' => 'Terminology – Blah'
    ]
));

来自文档 http://docs.aws.amazon.com/AmazonS3/latest/dev/UsingMetadata.html#UserMetadata ...

Amazon S3 以小写形式存储用户定义的元数据。每个名称、值对在使用 REST 时必须符合 US-ASCII,在使用 SOAP 或通过 POST 进行基于浏览器的上传时必须符合 UTF-8。

于 2015-06-02T15:43:59.810 回答
1

putObject()在指定Key以斜杠字符 ( ) 开头时出现此错误/- 删除斜杠后它工作正常。

于 2018-02-22T20:00:35.377 回答
0

AWS 返回此错误的原因通常是密钥正确

于 2020-06-17T14:37:42.827 回答