尝试将文件上载到临时URL时,签名不匹配

时间:2015-09-29 12:51:44

标签: python amazon-web-services amazon-s3

我目前正在尝试构建一个Web服务来生成到Amazon S3的临时URL(这样我就不需要在其他地方保留凭据)。如果我没有在generate_url方法的标题中包含'Content-MD5'键,它可以正常工作,但是一旦包含,我总是得到同样的错误:

“我们计算的请求签名与您提供的签名不符。请检查您的密钥和签名方法。”

生成md5并按以下方式包含:

md5checksum = key.compute_md5(open(filepath, "rb"))[0]
r = cli.session.post(serviceAddress + webService , data=json.dumps({"key": key, "size": os.path.getsize(filepath), "md5" : md5checksum}))

我也尝试用

生成md5
md5checksum = hashlib.md5(open(filepath).read()).hexdigest()

在网络服务方面,临时URL通过

生成
headers={'Content-Length': length, 'Content-MD5': md5}
return self.conn.generate_url(expire, 'PUT', self.name, key, headers=headers, force_http=True)

我已经检查过md5在生成URL和文件上传之间没有变化。如果我只删除'Content-MD5':md5,它确实可以正常工作。

1 个答案:

答案 0 :(得分:1)

根据AWS文档,Content-MD5需要采用Base64编码:

  

Content-MD5:消息的base64编码的128位MD5摘要   (根据RFC 1864

,没有标题)

来源:http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html