我的配置(非常基本):
设置.py
AWS_S3_REGION_NAME = 'eu-west-3'
AWS_S3_FILE_OVERWRITE = 假
# S3_USE_SIGV4 = True # 如果使用,没有任何变化
# AWS_S3_SIGNATURE_VERSION = "s3v4" # 如果使用,没有任何变化
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' # 如果使用,没有预签名的 url
AWS_DEFAULT_ACL = '私人'
AWS_S3_OBJECT_PARAMETERS = {'CacheControl': 'max-age=86400'}
AWS_LOCATION = 'xxx'
DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
安装应用程序 = [
...,
“存储”
]
模型.py
类 ProcessStep(模型。模型):
icon = models.FileField(upload_to="photos/process_icons/")
我得到什么:
- 生成预签名的 url(在管理页面中
icon.url和自动在管理页面上) - 预签名的 url 响应状态码 = 403(禁止)
- 如果打开,
SignatureDoesNotMatch错误。带文字:The request signature we calculated does not match the signature you provided. Check your key and signing method.
试过:
- 更改访问密钥(根和 IAM)
- 改变桶区域
- 为字段创建单独的存储对象
icon(相同的错误 SignatureDoesNotMatch) - 更改 django-storages 包版本(目前使用最新的 1.11.1)
观点:
- boto3 客户端
generate_presigned_url返回带有无效签名的 url
问题:
- 我应该怎么办?
- 为什么我会收到错误消息?