问题描述
我使用django-storages将静态文件和私有文件存储在s3存储桶中。
对于一些文件,我需要在url中传递参数,因为所请求的html文件会使用这些参数生成动态内容。
例如:
https://example-static-bucket.s3.amazonaws.com/static/header.html?name=Example&site=2
使用静态文件,效果很好。
但是,如果我使用django-storages获取私有文件的签名URL并添加参数,则会出现错误:
<Error>
<Code>SignatureDoesNotMatch</Code>
<Message>The request signature we calculated does not match the signature you provided. Check your key and signing method.</Message>
...
</Error>
如何使用django-storages将参数添加到已签名的url中?
解决方法
S3存储静态对象,您不能使用签名的URL对其进行修改。可以将S3对象视为文件系统中的文件:它们具有路径和名称,您可以获取其内容,但是它们是用于数据的哑容器。
类似地,您不能让static / header.html基于调用的参数而变得不同。您可以上传文件,也可以下载文件。