我的配置(非常基本):
设置.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
问题:
- 我应该怎么办?
- 为什么我会收到错误消息?