SignatureDoesNotMatch - Amazon S3 API

Rom*_*kin 8 php upload amazon file-upload amazon-s3

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

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

怎么解决?

谢谢.

awe*_*ndt 8

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

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

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


Car*_*ton 5

我个人收到这个错误是因为我的元数据中的字符。

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

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

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

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

  • 同上 - 将带有键 'Cache-Control' 的元数据添加到已经具有元数据键 'cache-control' 的对象上时,出现此错误。 (2认同)