无法通过 Django 从 aws S3 存储桶访问上传的图像

时间:2021-05-28 07:50:43

标签: django amazon-web-services amazon-s3

我已经成功完成了通过django settings.py文件上传图片到s3 bucket的配置。

这是我的配置:

  AWS_ACCESS_KEY_ID = '######################'
  AWS_SECRET_ACCESS_KEY = '###########################'
  AWS_STORAGE_BUCKET_NAME = 'divytrust-image'

  AWS_S3_FILE_OVERWRITE = False
  AWS_DEFAULT_ACL = None
  DEFAULT_FILE_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'

我在服务器上使用 Nginx+gunicorn。 我能够成功地将图像上传到 s3bucket/pics 但是当我尝试从 django 管理面板查看图像时,出现错误:

  This XML file does not appear to have any style information associated with it. The 
  document tree is shown below.

  <Error>
    <Code>InvalidRequest</Code>
    <Message>The authorization mechanism you have provided is not supported. Please use 
    AWS4-HMAC-SHA256.</Message>
    <RequestId>1F51EJV41QT73FSV</RequestId>
    <HostId>ZL9W4GqDXDbPluBsX+aC4FvRzVy0CLLjy6mXEPL8U/zAWSFzNi1tAQQixGIhbLgeADS1DV0Mv8c= 
  </HostId>

1 个答案:

答案 0 :(得分:0)

我最近遇到了同样的问题。

解决方案是指定要使用的 S3 签名版本,即 v4。某些地区的旧 SDK 的默认值为 v2。您可能需要先升级 SDK。

来自 Django S3 文档:

AWS_S3_SIGNATURE_VERSION
<块引用>

自 boto3 版本 1.13.21 起,默认签名版本用于 生成预先签名的 url 仍然是 v2。能够访问您的 s3 所有区域中的对象通过预先签名的 url,明确地将其设置为 s3v4。

还要注意签名版本不向后兼容,这可能会导致遗留项目出现问题。