我已经使用generate_url(300, 'PUT', ...)
方法生成了此网址,并且我想使用requests library将文件上传到其中。
这是我一直在使用的代码:requests.put(url, data=content, headers={'Content-Type': content_type})
,我也尝试了一些变体,但我得到的错误始终是一样的。
我每次都会从S3收到403 - SignatureDoesNotMatch
错误,我做错了什么?
答案 0 :(得分:1)
使用boto3
,这是如何生成上传网址和PUT
中的一些数据:
session = boto3.Session(aws_access_key_id="XXX", aws_secret_access_key="XXX")
s3client = session.client('s3')
url = s3client.generate_presigned_url('put_object', Params={'Bucket': 'mybucket', 'Key': 'mykey'})
requests.put(url, data=content)
答案 1 :(得分:0)
S3需要身份验证令牌。请检查令牌。
我建议您直接使用boto。
bucket.new_key()
key.name = keyname
key.set_contents_from_filename(filename, {"Content-Type": content_type})
# optional if file public to read
bucket.set_acl('public-read', key.name)
另外请检查您是否添加了Content-Length标头。这是必需的,并参与auth哈希计算。