You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用django-storages对接Minio(S3v4签名)上传文件时出现XAmzContentSHA256Mismatch错误的求助

django-storages对接Minio(S3v4签名)上传文件时出现XAmzContentSHA256Mismatch错误的求助

我已经成功配置了django-storages对接自托管的Minio实例,相关的Django配置如下:

STORAGES = {
    "default": {
        "BACKEND": "storages.backends.s3.S3Storage",
        "OPTIONS": {
            "endpoint_url": os.getenv("MINIO_ENDPOINT_URL"),
            "access_key": os.getenv("MINIO_ACCESS_KEY"),
            "secret_key": os.getenv("MINIO_SECRET_KEY"),
            "bucket_name": os.getenv("MINIO_BUCKET_NAME"),
            "region_name": os.getenv("MINIO_REGION_NAME"),
            "signature_version": os.getenv("MINIO_SIGNATURE_VERSION", "s3v4"),
        },
    },
    "staticfiles": {
        "BACKEND": "django.contrib.staticfiles.storage.StaticFilesStorage",
    },
}

我的Minio实例部署在eu-central-1区域,这个区域是支持S3 v4签名版本的。所有配置项(终端地址、密钥、桶名等)都能正确从.env文件读取,在settings里打印出来验证过没问题。

目前文件拉取功能完全正常:能正常获取文件、控制台可以看到请求日志、生成的签名URL也能正常访问,没有任何问题。

但当我尝试通过Swagger UI调用一个接收multipart/form-data的文件上传接口时,出现了报错:

ClientError at /files/uploaded-files/
An error occurred (XAmzContentSHA256Mismatch) when calling the PutObject operation: The provided 'x-amz-content-sha256' header does not match what was computed.

我排查后发现,只要把签名版本从s3v4改成s3,文件的上传和拉取就都能正常工作了。但根据我的理解,s3v4更安全,s3签名已经被弃用,应该优先使用s3v4才对。

有没有大佬遇到过类似的问题?这个错误到底是Minio端的配置问题、django-storages的配置问题,还是其他环节的问题?应该怎么修复才能在使用s3v4签名的同时正常完成文件上传?

提前感谢各位的帮忙!

火山引擎 最新活动