亚马逊S3:奇怪的错误 - '有时'SignatureDoesNotMatch,有时它会

Gan*_*sle 7 authentication salesforce force.com amazon-s3 amazon-web-services

我正在为salesforce开发代码.我们正在使用Appexchange的"Force.com for Amazon Web Services"应用程序.该应用程序由亚马逊提供.

我正在从机器上的Amazon S3下载文件.

有时我得到下面提到的错误.有趣的是,有时候我会得到这个错误,其余的时间都可以工作,即使对于同一个文件也是如此.

<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>
The request signature we calculated does not match the signature you provided. Check your key and signing method.
</Message>
Run Code Online (Sandbox Code Playgroud)

我尝试使用亚马逊提供的两种网址模式.过期在链接生成后设置为1小时,因此可能不是问题.

URL1:- http://adminportal.s3.amazonaws.com/sample.pdf?AWSAccessKeyId=AKIAIRUZSRRCVSLXZCIA&Expires=1372653478&Signature=RvMJ1gJL+qNKmnRkqzuytmlUTGQ=
URL2:- http://s3.amazonaws.com/adminportal/sample.pdf?AWSAccessKeyId=AKIAIRUZSRRCVSLXZCIA&Expires=1372658253&Signature=%2FmI0m0PTlHJpJ%2FP5d%2FX3OApqzcI%3D
Run Code Online (Sandbox Code Playgroud)

签名是由亚马逊提供的类生成的,我想它一直都能运行良好.

有人可以详细说明为什么S3有时会出现此错误?

Gan*_*sle 10

最后我能够解决这个问题,这里是怎么回事?

Amazon S3上文件的示例网址是 -

http://adminportal.s3.amazonaws.com/sample.pdf?AWSAccessKeyId=AKIAIRUZSRRCVSLXZCIA&Expires=1372653478&Signature=RvMJ1gJL+qNKmnRkqzuytmlUTGQ=
Run Code Online (Sandbox Code Playgroud)

签名由亚马逊提供的类生成.

由于未知原因,'Force.com for Amazon Web Services'应用程序正在生成包含SPACES的签名.

例如,在给定的URL中,空格被替换为"+".

要解决这个问题,只需对URL进行编码即可.编码将替换具有特殊字符的空格,问题将得到解决.