Amazon S3 iOS SDK照片上传错误SOMETIMES - SignatureDoesNotMatch

时间:2013-07-22 22:46:47

标签: ios amazon-web-services amazon-s3 amazon put

所以我的iPhone应用程序成功将照片上传到Amazon S3。我使用与最新(版本1.6.0)适用于iOS的Amazon AWS SDK的S3Uploader示例项目相同的代码。问题是间歇性地我会得到SignatureDoesNotMatch错误(我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。)。它没有任何模式。目前我的应用程序通过在委托调用didFailWithError上执行一定量的重试来解决此错误:。

到目前为止,我的测试有足够的重试次数,因此用户不会注意到错误,但是当我的签名明显正确时,知道我收到签名密钥错误是非常令人沮丧的,因为它有时会起作用。我不确定它是否是url编码错误(我的签名密钥中有一个+号),但由于我使用的是iOS SDK,我看不到PUT url的处理方式。

另外,我确认我的存储桶名称全是小写,我的文件名只是数字和几个字母。我也尝试了不同的区域,它们都有相同的结果。简而言之,在没有SignatureDoesNotMatch错误的情况下,可以在0次重试到5次重试之间获得成功的PUT。有没有人有类似的问题?任何帮助将不胜感激。谢谢你的阅读。

2 个答案:

答案 0 :(得分:3)

生成签名后,您可能需要按下签名,因为有效的base64在查询字符串中并不总是有效。我曾经遇到过同样的问题,因为我在我写的一些代码中发现了以下注释:

# the "+" is not url-safe, as it gets converted to a space somewhere along the line

# '+' => '%2B'

# while we're at it, we'll go ahead and convert the other non-safe-ish 
# characters even though the links seem to work without this step

# '/' => '%2F'
# '=' => '%3D'

我的代码对这3个字符进行字符串搜索和替换,在将查询字符串返回给调用者之前将其更改为url编码的等效字符。我使用了搜索/替换策略,因为我在工作的环境中没有适当的url编码库。由于这些是我的代码可以生成的唯一3个base64字符,这些字符显然不是url-safe,我显然已经开始处理所有这三种可能性。

答案 1 :(得分:2)

行。所以在花了最后几天尝试新的桶...尝试所有不同的NSString编码/ UIImage到NSData语句...从嵌入式切换到TVM ...从我的项目来回跳转到TVM演示...并阅读调试输出的页面和页面......我发现它与任何这些都无关! :P

一旦我意识到我无意中将AWS框架复制到我的项目文件夹中,我删除了它们并重新添加它们而没有选中复制框(引用我的SDK文件夹)。繁荣 - 没有签名错误。

AWS SDK显然不喜欢在一个系统上拥有多个框架实例。希望这有助于他人! :)