我想从aws获取预签名的url。但是我收到错误消息:“我们计算出的请求签名与您提供的签名不匹配。请检查您的密钥和签名方法。”
这里是我的Django代码:
Sttings.py:
AWS_ACCESS_KEY_ID ='*********'
AWS_SECRET_ACCESS_KEY ='**********'
AWS_STORAGE_BUCKET_NAME ='******'
AWS_REGION_NAME ='*******'
在views.py中:
def post(self, request, key):
bucket_name = settings.AWS_STORAGE_BUCKET_NAME
s3_client = boto3.client('s3',
aws_access_key_id=settings.AWS_ACCESS_KEY_ID,
aws_secret_access_key=settings.AWS_SECRET_ACCESS_KEY,
config=Config(signature_version='s3v4'),
region_name=settings.AWS_REGION_NAME
)
try:
response = s3_client.generate_presigned_url('put_object',
Params={'Bucket': bucket_name,
'Key': key},
ExpiresIn=3600)
except ClientError as e:
return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR, data={"error_message": str(e)})
else:
return Response({
"url": response
})
我们需要创建一个用户并在AWS中授予getobject和putobject权限。文档https://docs.aws.amazon.com/AmazonS3/latest/dev/example-walkthroughs-managing-access-example3.html