问题描述
我的配置(非常基本):
settings.py AWS_S3_REGION_NAME = 'eu-west-3' AWS_S3_FILE_OVERWRITE = False # S3_USE_sigv4 = True # if used,nothing changes # AWS_S3_SIGNATURE_VERSION = "s3v4" # if used,nothing changes AWS_ACCESS_KEY_ID = "xxx" AWS_SECRET_ACCESS_KEY = "xxx" AWS_STORAGE_BUCKET_NAME = 'xxx' # AWS_S3_CUSTOM_DOMAIN = f'{AWS_STORAGE_BUCKET_NAME}.s3.amazonaws.com' # if used,no pre-signed urls AWS_DEFAULT_ACL = 'private' AWS_S3_OBJECT_ParaMETERS = {'CacheControl': 'max-age=86400'} AWS_LOCATION = 'xxx' DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage' INSTALLED_APPS = [ ...,'storages' ] models.py class Processstep(models.Model): icon = models.FileField(upload_to="photos/process_icons/")
我得到了什么:
- 生成预签名网址(在
icon.url
中和在管理页面上自动生成) - 预签名的 url 响应状态代码 = 403(禁止)
- 如果打开,
SignatureDoesNotMatch
错误。带有文字:The request signature we calculated does not match the signature you provided. Check your key and signing method.
尝试过:
- 更改访问密钥(root 和 IAM)
- 改变桶区域
- 为
icon
字段创建单独的存储对象(相同错误 SignatureDoesNotMatch) - 更改 django-storages 包版本(目前使用最新的 1.11.1)
意见:
- boto3 客户端
generate_presigned_url
返回带有无效签名的网址
问题:
- 我该怎么办?
- 为什么会出现错误?
解决方法
耐心是一种美德!
一个人可能要等 1 天才能一切正常